Writing A Compiler In Goを読んだ

Writing A Compiler In Goを読んだ。 この本は、Go言語で作るインタプリタ の続編で 前作で作ったTree-walking インタプリタで動作するmonkeyという言語を コンパイルして、バイトコードを吐き出し、それをVM上で動かすようにする、というのが最終的な目標になる。 lexer, parserなどは前作で作ったものを用いることになる。

この本の中身については、他の人が書いた記事を見るとよく分かると思うので ここにリンクを貼っておく。この記事では、僕が読もうとしたきっかけなどを書こうと思う。

この本を読もうと思ったきっかけは、そもそも前作であるインタプリタの実装が興味深いものだったからである。 前作では、説明も実直に書かれており、テストを書いてから実装を作るという流れを一貫して行っていて読みやすい上に、 実装の過程で、小まめに動くようになったことについて、著者と喜びを分かち合えるような本になっている。

上記ブログでいくつか紹介されており、そのうち読みたいなぁと思っていたが 英語版しか出版されていないこともあり、手が遠のいていたが ちょっと手を動かして書いてみたいなと思って、この本を手を取ってみた。

この本も前作同様に、説明は細やかで、テストを書いてから実装を作るという流れは変わっていない。 また、この本では、コンパイラとそれが吐き出すバイトコードおよび、それを実行するVMの設計と実装を行っていくが レキサやパーサについては、前作で作ったものを流用するため、それには注意が必要である。(最終的なソースコードgithubとかで配布してたので、そこから拝借することはできるはず) タイトルにもあるとおり、Goですべてを書いていくため、コードが読みやすいのも嬉しい。

また、個人的な話として前作のインタプリタの発展で destructuringを少し実装していたので それもちょっと遊びで実装したが、面白かった。コードとしてはここに置いてある。

面白かったので記事として書いておいた。 興味があったら読んでみてほしい。

compilerbook.com