Compiler and interpreter goldmines: build the language
The language-implementation canon that actually gets read: Crafting Interpreters, Russ Cox's essays, Eli Bendersky's archive, matklad, and the Architecture of Open Source Applications.
Compiler and interpreter goldmines: build the language
Nothing demystifies computing like implementing a language — and the field quietly produced some of the best-written technical material anywhere. These are the entries worth your evenings.
The modern classic
- Crafting Interpreters — Bob Nystrom. Free online, and simply one of the best technical books ever written: a complete tree-walking interpreter in Java, then a bytecode VM with GC in C, every single line of both in the book. The prose is so good it hides how much you’re learning. If “compilers” ever felt like a graduate gate, this is the counter-evidence.
- Game Programming Patterns — Nystrom’s other free book. Not compilers, but the chapters on bytecode, object pools, and data locality are systems design education disguised as game dev.
The essays
- Russ Cox: research.swtch.com — the Go co-lead’s essay archive. The regular expression series (why Thompson NFA beats backtracking, how RE2 works) is the single best compiler-adjacent read on the internet; the “Zip files all the way down” and version -selection essays show what rigorous engineering writing looks like.
- Eli Bendersky — twenty years of patient deep dives: parsing (his recursive descent and Pratt parsing posts are the standard references), LLVM internals, Go assembly, CPython internals. The archive rewards systematic raiding.
- matklad — Alex Kladov, rust-analyzer’s original author. “Simple but Powerful Pratt Parsing” finally made operator precedence click for a generation; the posts on IDE-grade incremental analysis, testing strategy, and code architecture generalize far beyond compilers.
Reading real codebases
- The Architecture of Open Source Applications + 500 Lines or Less — free volumes where maintainers explain their own systems’ architecture (LLVM, nginx, SQLite chapters are standouts), and then build small complete systems in under 500 lines. The missing genre: how software is actually structured, written by the people who structured it.
- Writing an Interpreter in Go / Writing a Compiler in Go — Thorsten Ball. The test-driven companion path to Nystrom: everything built via TDD, which doubles as a masterclass in testing language tooling.
Why this is on a systems-portfolio site
Language implementation is transfer learning for everything else: parsers are protocol decoders (the SOAP wrapper project), bytecode VMs are schedulers with opinions, and GC is cache management wearing a costume. The habit these books build — hold the whole pipeline in your head, from characters to behavior — is the systems habit.
This post is licensed under CC BY 4.0 by the author.