Revisiting "Let's Build a Compiler"

Vintage tutorial gets a Python & WebAssembly glow-up as HN battles nostalgia vs 'use LLVM'

TLDR: A classic compiler tutorial was translated to Python and WebAssembly, making it easy to try today. Comments split between love for the simple, hands-on style and calls to use modern tools like LLVM, with bonus nostalgia over USENET still being alive—proof old lessons still teach new tricks.

A dev just gave the 35-year-old “Let’s Build a Compiler” a modern makeover, translating the beloved Pascal-and-68000 guide into Python and WebAssembly (a way to run code fast in the browser). Hacker News didn’t just clap — it turned into a reunion, a debate, and a meme-fest. The loudest cheerleaders call it the most accessible path into compilers, with one user saying it was an “eye opener” at age 17. Others swoon over its no-nonsense approach: skip the math class vibes and generate real code early, as shoo gushed.

But the modernists showed up with a vibe of “grandpa, hand me the keys,” dropping a link to the LLVM guide and chanting “just use modern tools.” That sparked a mini culture war: learn by building tiny, messy things vs start with industry-grade machinery. Meanwhile, pjmlp dropped a bombshell: the old-school USENET compilers group is still active, prompting jokes like “tell me you’re a compiler hipster without telling me.” Everyone agrees the new repo’s code isn’t optimized — and no one cares. The crowd wants clarity, not speed: readable steps, a testable “X” value, and that nostalgia-dripping KISS language sample. Verdict: the OG tutorial is back, and the comments are pure cinema.

Key Points

  • The article revisits Jack Crenshaw’s 1988–1995 compiler tutorial and explores its ongoing relevance.
  • The author translates the tutorial’s compilers into Python and targets WebAssembly instead of 68000 assembly.
  • A repository with TUTORIAL.md maps each original tutorial part to the new implementation for easy follow-along.
  • A KISS language sample from part 13 is compiled to WASM, illustrating procedures, loops, and by-reference parameter handling.
  • The generated code is minimally optimized and tested by running WASM outputs to verify expected results; a global variable is returned for test convenience.

Hottest takes

"Building a recursive descent parser from scratch was an eye opener to 17yo me" — statictype
"Rather than getting stuck in front-end minutiae, the tutorial goes straight to generating working assembly code, from very early on" — shoo
"Which by the way, it is still active" — pjmlp
Made with <3 by @siedrix and @shesho from CDMX. Powered by Forge&Hive.