Beautiful Racket
This looks like a very well-written, easy introduction to making simple, dynamic programming languages (not surprising given the author's writing background).<p>But everyone writes about how to build these kinds of basic Forths, or Lisps, or reverse polish notation calculators.  To be honest, once you've learned the basic technique, writing a toy dynamic language interpreter is pretty easy.  Even adding a toy JIT isn't very hard, and there are multiple guides online on how to do this using Luajit, or Libjit, PyPy, or LLVM, etc.<p>What I want more than anything is a guide written on the same level on how to build a toy statically-typed language, with algebraic data types.  And even better, some basic discussion on how to learn about implementing advanced techniques like refinement, or linear, or dependent types (I realize these are extremely complex topics).<p>Every discussion I find on these topics is in dense academic papers.  I'm slowly making headway, but it's a slog.<p>The only good resource I've found so far (and it's an excellent one) is Andrej Bauer's Programming Languages Zoo.  But as far as I know, it's all (very helpful and instructive) source code, with no accompanying tutorials.<p>Is there no very simple introduction on writing a simple ML, with type checking?  Any recommended resources?<p>It's possible that Butterick intends to cover these topics in later chapters, in which case I can't wait to read the book.