In this book, you will be learning to build an interpreter for a modified subset of Scheme, a Lisp dialect, using the Rust programming language. The interpreter will be implemented from scratch using standard Rust. Rust's rich programming constructs such as Enum, Pattern Matching, and Error Handling, will make it easy and a joy to create a fully functional Lisp interpreter. With Rust's concise syntax, you will be amazed how fast you will be able to get an interpreter working with a few lines of code within a short period.
The book is divided into three parts to ease the learning curve and not overwhelm the reader. The first part implements a fully functional interpreter and a REPL (Read-Eval-Print-Loop). This interpreter will support limited data types, variables, if-else expressions, lambdas (functions), and lambda calls. With the core interpreter framework in place, the book's second part will extend the interpreter with more advanced data types such as strings, floats, and lists. This will be followed by additions to support functional programming constructs such as map, filter, and reduce. In the book's last part, we will add support for closures and tail call optimization, which will make the interpreter extremely scalable for tail-recursive functions. You will have a Lisp interpreter with the most modern functionality implemented by the end. The book will walk you through each piece of the Rust code and all the tests used to implement the functionality. In addition, exercises are spread across the book, providing ideas to add new functionality.
This book offers a hands-on approach and does not dwell much on programming language theory. The goal is to teach you how to practically build interpreters or DSL (Domain Specific Language) frameworks using Rust. The book is highly focused and relatively small (less than 120 pages), so if you are a moderately experienced programmer, you should be able to consume the book quickly.
Please note that this book is about building an interpreter and is not meant to learn Rust programming.
This is an interesting one, if you know what you're doing.
I opted to follow the book and not download the code as suggested by the author, so bear this in mind as we go forward.
The code (in the book) is presented only partially. You have to reconstruct the code based on guesses of type signatures based on some random call-sites in tests. If that wasn't enough, the code is terribly broken in multiple locations (I had to debug many things, and significantly refactor the implementation of function calls for instance).
Maybe the code in the author's repo is better (as in, passes tests...) but so far this has been a bit of a let-down as a book.
Its saving grace (for me) is that it was at least fun to try to fix the bugs and actually get the interpreter to work (though, I have a year of experience in Rust and many years writing lisp interpreters, and my main background is PLT, so I don't know if you will have the same experience as I did).