Compilers
Where to start, personal recommendations
Crafting Interpreters is a best book to start. Then I suggest going through the LLVM tutorial. From there, take Advanced Compilers class from Cornell to learn about IRs and implement your own optimizations. For in-depth theory I suggest Engineering a Compiler book.
Courses
- Stanford Compilers CS143 by Alex Aiken, video lectures on edX
- Cornell CS 6120: Advanced Compilers: The Self-Guided Online Course by Adrian Sampson
- Compiler class by Nicolas Laurent, video lectures
- Compiler - Nuts and bolts of Programming Languages (2019) by Pietro Grandinetti
- Toolchain & pony - YouTube (2020)
- Dmitry Soshnikov - YouTube
Books
- Crafting Interpreters (2021) by Robert Nystrom
- Engineering a Compiler, 3rd edition (2022) by Keith Cooper, Linda Torczon
- Introduction to Compilers and Language Design (2021) by Douglas Thain
- Compiling to Assembly from Scratch (2022) by Vladimir Keleshev
- Writing A Compiler In Go (2020) by Thorsten Ball
- Basics of Compiler Design (2010) by Torben Mogensen
- Essentials of Compilation (2023) by Jeremy G. Siek
- Modern Compiler Implementation in ML (1998) by Andrew W. Appel
- Compiler Design in C (1990) by Allen Holub
- Writing a C Compiler (2023) by Nora Sandler
- Compilers: Principles, Techniques, and Tools (2006) by Alfred V. Aho, Monica S. Lam, Ravi Sethi, and Jeffrey D. Ullman
- Practical Compiler Construction: A No-nonsense Tour through a C Compiler (2022) by Nils M Holm
- Programming Language Pragmatics (2015) by Michael L. Scott
Books (advanced)
- Types and Programming Languages (2002) by Benjamin C. Pierce
- SSA-based Compiler Design (2022) by Fabrice Rastello, Florent Bouchez Tichadou
Papers
- An Incremental Approach to Compiler Construction (2006) by Abdulaziz Ghuloum
Lecture notes
- Post-Modern Compiler Design (2019) by Tiark Rompf
- CS243 – Program Analysis and Optimizations
- CS343 – Advanced Topics in Compilers
- CS4200 | Compiler Construction from TU Delft (2021)
Study projects, toy compilers
- A Compiler Writing Journey (2019) by Warren Toomey
- GitHub - andrewrothman/SmallVM: A small virtual machine with focus on educating others about virtual machines (2012) by Andrew Rothman
- Introduction to Compilers (2017) by Alex Hoppen – Swift Playground giving an overview over the inner workings of modern compilers
- sandersn/mini-typescript: A miniature model of the Typescript compiler, intended to teach the structure of the real Typescript compiler by Nathan Shively-Sanders
- GitHub - SimplyDanny/bitsy-llvm: Compiler for the Bitsy language based on LLVM
- tyfkda/xcc: Toy C compiler for x86-64/aarch64/wasm
- rui314/9cc: A Small C Compiler
Recommendations and personal experience
- Compiler Engineer Path – Dmitry Soshnikov
- Recommendations // -dealloc
- How to learn compilers: LLVM Edition - Low Level Bits 🇺🇦
- Programming languages resources | Max Bernstein
- The Compiler Writer Resource Page
- The path to implementing a programming language (2023)
- Craig Stuntz - On Learning Compilers and Creating Programming Languages (2023)
- Undergrad Compilers from the Hive Mind | eschew it all (2020)
Other
- Virtual Machines Summer School 2016
- PL Pragmatics Newsletter | Slava Egorov | Substack
- Low-Level Software Security for Compiler Developers (2022)
- compilers - Compiler design | Lobsters
- Toolchains.net - Compiler toolchains resources
Blog posts
- Teaching Compilers (2020) by Dan Ghica
- Writing a C Compiler, Part 1 (2017) by Nora Sandler
- A crash course in compilers (2018) by Ramsey Nasser
- Teaching Compilers Backward | SIGPLAN Blog (2021) by Yotam Feldman, Mooly Sagiv
- An Introduction to Interpreters and JIT Compilation · Stefan-Marr.de (2023)
IR
Ask HN
Linkers
- Linkers & Loaders (1999)
- A ToC of the 20 part linker essay by Ian Lance Taylor
- Everything You Never Wanted To Know About Linker Script · mcyoung (2021)
- Eyes Above The Waves: Do We Really Need A Link Step? (2021)
- Day 34 — Linkers go brrrrr - Vinayak Mehta (2020)
- Beginner's Guide to Linkers (2009)
Parsers
- Parser Combinators From Scratch - YouTube
- Just write the #!%/* parser (2020)
- Why We Need to Know LR and Recursive Descent Parsing Techniques (2023)
YouTube
- Context Free - YouTube
- Creating a Compiler - YouTube – author implements a compiler in C++ that emits X86-64 assembly
- Writing a compiler in F# (video series)