Home All Posts

Compiler Time

2018-08-26

Well I’ve found another distraction from SICP which I’m going to pick up after I finish the exercises in chapter 2, but I’ve already started reading it a little bit. Thorsten Ball has released his sequel to Writing an Interpreter in Go, entitled Writing a Compiler in Go and I’m excited to get my hands on it. His first book was great, and made writing an interpreter fun and easy. I’m looking forward to building the stack based VM and compiler and hacking away at that.

Last time I translated the code from Golang to C# so I’d have to think a little bit while following along (I still have to do hashes and arrays) and it worked great.

I’m also excited to dig through some of his Golang code again. After writing the assembler for Nand2Tetris in Golang and then some simple test code I was working on, I’m finding I like Golang more and more. I’ve been using the Goland IDE from JetBrains since I got it for free from their open source licensing program. Since I’ve kind of discontinued the Bagombo project I’ll have to start a new open source project to renew the license in December. Maybe I’ll put together a simple language and compiler after working through this book.

After finishing part one of Nand2Tetris and building the computer and assembler I’m even more excited to work through Ball’s compiler book. A year ago before I started this I’d been interested in programming languages and compilers and how they worked, and after working through Nand2Tetris and Ball’s first book, they are much more approachable.

Back in April I came up with a “learning plan” which has changed a little bit and become more detailed.

It spread out from a one year plan which was far to compressed to a general four to five year outline I’ve put together, and while I’m only a few months into it I’m happy with my progress so far. While SICP is kind of the over-arching book to get through in this first year, I’ve still had enough time for my detours such as this book and Nand2Tetris.

The next part I’m adding in is the Discrete Math specialization on Coursera. While learning about parsing and how compilers work has been fun, there is a whole other side to learning about more advanced languages such as Haskell and ML and type systems. Past C# and Golang there are a number of interesting languages.

My goal is to understand enough of the math notation and theory to be able to work through the book Types and Programming Languages in the next year or two. I’m also becoming enamored with Scheme and very interested in learning Clojure after finishing SICP.

So anyway, after hacking through chapter two of SICP which I’m almost done with I’ll be hacking away at the Monkey compiler detailed in Ball’s new book.

I also have a few more blog posts to write this month. So far I’ve kept up with writing a post or so a week. I’d like to write more technical posts and code walkthroughs sooner rather then later.