
This book covers topics related to the functionality and design of compilers, including: • Compiler structure • Lexical analysis (including regular expressions and finite automata) • Syntax analysis (including context-free grammars, LL parsers, bottom-up parsers, and LR parsers) • Syntax-directed translation • Type checking (including type conversions and polymorphism) • Run-time environment (including parameter passing, symbol tables, and storage allocation) • Code generation (including intermediate code generation) • Code optimization
Can confirm; got a few hints from the 1988 edition when working on the TXR Lisp compiler.
Oh, and also when implementing regexes, not to forget!
However, the Lisp compiler has its own magics that are not exactly covered in the Dragon Book. Some really nice way of doing things.
Specifically I wrote a bunch of React components for making little biosignals applications that can (say) show two people's heartrate from bluetooth LE and show my breathing based on a strap i am wearing and another person's breathing based on a $20 radar from China.
I can pretty easily snap together the components and the system that feeds the state to the components by writing code. It works great, it's not that hard to do, it looks great.
But: I really wish I could make something where I could drag and drop display and data acquisition and processing components like LabView. Actually I know a lot about how to do the dynamic processing (Hint: read the Dragon book, not On Lisp) but React doesn't support dynamically assembled components... But I know Javascript systems can because I was writing them 2005-2010 back when browsers didn't have async and all the great affordances they offer now.
- Okasaki, Purely Functional Data Structures https://www.cs.cmu.edu/~rwh/students/okasaki.pdf
- The Garbage Collection Handbook https://gchandbook.org/
- The Dragon Book - https://faculty.sist.shanghaitech.edu.cn/faculty/songfu/cav/... (yes, it's old, but I still like the end-to-end, all-in-one intro)
- Windows Internals - https://learn.microsoft.com/en-us/sysinternals/resources/win...
- Structure and Interpretation of Computer Programs - https://web.mit.edu/6.001/6.037/sicp.pdf
- Concurrency Control and Recovery in Database Systems - https://www.microsoft.com/en-us/research/people/philbe/book/
- Crafting Interpreters - https://craftinginterpreters.com/
- What Every Programmer Needs to Know About Memory - https://people.freebsd.org/~lstewart/articles/cpumemory.pdf (the best thing Ulrich Drepper ever did)
- An Introduction to Modern Cryptography - https://eclass.uniwa.gr/modules/document/file.php/CSCYB105/R...
A good programming book gets better with age. If it's really about ideas and uses this or that technology for exposition, so much the better: the more remote in time the grammar of the examples, the more you can focus on the ideas. SICP being in Scheme is an advantage because you don't know Scheme yet; Windows Internals being about Windows teaches you generally good lessons in OS design by forcing you to contemplate a system alien to the Unix you probably know better.
It's shocking how many of these seminal books are available for free and how few people read them. Yes, yes, you can get the same information from an LLM, but an LLM won't give you the guided tour through the whole rugged ideas-space and show you a reasonable peak. Order, emphasis, and expository style build intuition, so books (especially old ones) are worth reading.
I disagree with the author's point: the "Dragon book"'s ("Compilers: Principles, Techniques, and Tools" by Aho et al.) Chapter 2 is a self-sufficient introduction into compilers from end to end, and it can be read on its own, ignoring the rest of the excellent book.
Another fantastic intro to compiler writing is the short little book "Compilers" by Niklaus Wirth, which explains and contains the surprisingly short source code of a complete compiler (the whole book is highly understandable - pristine clarity, really) and all in <100 pages total (99).
(I learned enough from these two sources to write a compiler in high school.)
A lot of people say the dragon book is difficult, so I suppose there must be something there. But I don't see what it is, I thought it was quite accessible.
I'm curious, what parts/aspects of the dragon book make it difficult to start with?