I've spent the last year wondering why compiling and linking took so long. Now I've been looking at the source of our toolchain and see that not only does it use linked lists for everything, it also appends everything at the end -- without storing a pointer to the last element in the head. Fixing the O(n) append improves performance a lot.