We are building a WebAssembly compiler for a project we initiated 2 years ago called Thengascript, a way to program web applications in Malayalam, our mother tongue. Towards this purpose, we began looking for resources to help us understand the craft of compiler engineering. This lead us to a research where we came across some stellar resources and great people working in the domain. Here we present the result of our searches as a a round-up of the great stuff we gathered.
Compilers are curious creatures. They take in a language, roughly comprehensible by humans, as its input and turns it into a form comprehensible by machines. This translation can happen in a single step or a series of steps, each of which can produce an intermediate language with a certain set of good properties. After this transformation is done, something magical happens: it makes human-computer interaction possible.
If peeking under their hood to understand how things work spark joy when you find out, compiler construction could be right up your alley. This curation done under the light of our own exploration of literature and media on compilers. We curate the easily accessible ones that form a rough progression as a roadmap and then list general resources that will help you once you have a grounding in the basics. We have tried to give credit to the people who have made this as they are the real heroes who have dedicated their time and effort to lend their broad shoulders to enable us to build novel things.
We have catalogued these resources in a way to help a beginner interested in making compilers, to proceed step by step, to become an expert. If you think we have left out any great resources, please reach out to us.
First of all, we present a roadmap we have used to understand compilers. The selection here is chosen in a way it unfolds their complexity, a few steps at a time.
Now if you have completed that roadmap, and you are still interested in learning more about compilers, you are quite likely someone who is passionate about engineering complex artifacts. Then a deep dive into compilers could be the right thing for you next.
We have collected here some high quality resources that unravel the engineering techniques used for building compilers. Few key things are required to see them through completion: the headspace to work through these in long stretches of time and the discipline to see the courses through to their end. By engaging in this meticulous process and making programming languages could just be one of the most fulfilling undertakings you do as an engineer.
Here we list a set of great online courses. We have chosen the ones with accompanying lecture videos so that they are self contained for motivated individuals to learn on their own.
Lots of content
Lots of content