(Disclaimer: I volunteered for proof-reading the book, and also provided technical feedback.)
This is a pragmatic book that successfully instructs a si(Disclaimer: I volunteered for proof-reading the book, and also provided technical feedback.)
This is a pragmatic book that successfully instructs a single person in building a compiler; it is not meant to be a textbook on compilers, compilation techniques, or compiler's theory. This book will get the reader building a compiler for a small language in one go (no pun intended), with code that can be easily extended to embrace more functionality. While the book focuses on the Go programming language, the ideas can be easily transported to different programming languages that allow an imperative programming paradigm (such as C, C++, Pascal, PHP, Python, and many others).
Thorsten employs an elegant programming style and test-driven approach in this book. The compiler is build in successions, handling larger problems at each step, but without overwhelming the reader. Some problems are much larger than others (e.g.: closures) by their nature, and yet Thorsten does an excellent job of both explaining and solving them.
The code is also continually tested for regressions because of the test-driven approach, so errors are always kept at bay (and sometimes the errors are expected, such as when introducing new functionality that intentionally breaks the code).
While the book focuses on compiling to bytecode for an accompanying virtual machine, it doesn't restrict the interested reader. A motivated reader will be able to adapt the compiler to produce an output that be further processed (e.g.: LLVM's intermediate format)---note that this is not covered in the book.
Overall this is an excellent hands-on and inspiring book for writing small compilers that a single person can manage. To my knowledge, the most closely-related book on this subject is Writing Compilers and Interpreters, though the style of that book is rather verbose in comparison to Thorsten's book....more