3 ms·
Just adjacent to "compiler engineers" are lots of engineers who work on what I would call "plumbing." e.g. the tools in your toolchain which aren't compiler op
by wyldfire 7y ago
Just adjacent to "compiler engineers" are lots of engineers who work on what I would call "plumbing." e.g. the tools in your toolchain which aren't compiler optimization passes but instead implement a particular backend or language/library/OS feature (preprocessor, linker, assembler, C library, etc). For those of us plumbers it's great to get experience with the specific tools in the toolchain on various backends to see how they work. The most critical things are (1) dumping output at various stages (2) your specific toolchain's debug functions, and (3) running strictly-analysis tools like readelf/objdump.
Learning how linkers and loaders [1][2] work really helps put the pieces together.
Exercises like isolating reproducible failures to a particular tool or compiler pass, C-reduce [3], etc. -- these are valuable.
Of course, like everyone else here says: LLVM is a great place to kick the tires on some of this stuff.
[1] https://en.wikipedia.org/wiki/Special:BookSources?isbn=978-1558604964 https://en.wikipedia.org/wiki/Special:BookSources?isbn=978-1...
[2] https://eli.thegreenplace.net/tag/linkers-and-loaders https://eli.thegreenplace.net/tag/linkers-and-loaders
[3] https://embed.cs.utah.edu/creduce/ https://embed.cs.utah.edu/creduce/