Here's a tentative table of contents, cribbed straight from the HN comment in question, but hopefully evolvable into something more complete:
- abstract interpretation
- compiling high level languages
- pointer analysis
- compiling dynamic dispatch
- garbage collection
Other ideas, added later:
- various optimizations, such as loop optimizations, strength reduction, and data-flow optimizations
- register allocation
I expect to delve deeply into the Dragon book, SICP, and Modern Compiler Design in order to learn more of the theory and practice of writing compilers. It'll be both a learning experience and a teaching experience. ☺
- Use nqp as the implementation language/compiler platform. It has Perl 6 grammars and is meant to be used to build higher-level languages.
- Build a language (called "Nugget") which is easy to read and explain. It has a small core and is easy to improve in various directions. It is powerful enough to self-host a parser easily.
Oh, here's another link, full of compiler optimizations. Might be useful when I dig into the literature.
This post about compiling a small example language to C is just incredibly clear and inspiring.