Compilers are a central pillar of our computing infrastructure. They implement a higher-level language in terms of a lower-level one. There are many reasons why engaging in compilers is a enjoyable and rewarding endeavour:
- Compilers are ubiquitous: they appear in web browsers, packet filters, binary translators, domain-specific languages, and so on.
- Compilers are increasingly important: with the decline of Dennard scaling and Moore's law facing its end, hardware is getting more heterogeneous (GPUs, FPGAs, TPUs, etc.). Supporting such architectures out of standard programming languages such as C/C++ is hard. Therefore, we are currently experiencing a trend in which libraries are replaced by domain-specific languages that need dedicated compilers.
- Compilers are interesting applications of a wide spectrum of interesting techniques from (theoretical) computer science: automata, efficient algorithms and data structures, graph theory, logic, decision procedures, semantics, and so on.
- Compilers are challenging: code generators typically face hard combinatorial optimization problems that need to be solved with a acceptable level of quality and in an acceptable amount of time. Furthermore, compilers are huge software systems using intricate, well-tuned algorithms that are hard to get right. Hence, they are interesting targets for testing and verification.
- Compilers improve your understanding of the inner workings of programming languages and their implementation and ultimately make you a more conscious, perhaps even a better programmer.
- Finally, every big company has compiler teams and they are always looking for good compiler engineers.
Sebastian Hack is a professor of computer science at Saarland University. Before, he was an assistant professor at Saarland University, a Post-Doc at EPFL and at ENS Lyon. He received his PhD in 2006 and his Diploma degree in 2004 from KIT, Germany.
Sebastian's interests are in the theory and practice of compilation. Together with his students and collaborators, he worked extensively on SSA-based techniques, whole-function vectorization, and the design and implementation of domain-specific languages. Some of their ideas have been adopted in widely-used compilers such as LLVM, Google's Go compiler, and Firefox Cranelift.