どうも、omasanoriです。今年読んだ本のなかでも一推しの1冊(正確には2冊)を紹介します。それはEssentials of Compilation(MIT Press)です。
x86-64向けの小さなコンパイラをインクリメンタルに書く本。Racket(Scheme系Lispの一種)でRacketのサブセットを実装する本とPythonでPythonのサブセットを実装する本の2バージョンある。
どのような事柄を学べるかについては https://scrapbox.io/prog-lang-sys-ja/Essentials_of_Compilation を参照。
この本のいいところはインクリメンタルに書くという点。よくあるコンパイラ本は最後の方まで追わないとコンパイラとして動くプログラムが得られず、途中で挫折しがち。この本は数を書いた「ソースコード」を入力するとその数が返り値になるプログラムを出力する小さな小さなコンパイラから徐々に発展させていく。
この説明を読んでAn Incremental Approach to Compiler Constructionという文章を思い出す方もいるかもしれない。この本はまさにその文章の由来となったコンパイラの大学講義の資料が元になっている。
もし可能なら日本語訳の出版に喜んで協力したい、英語で書かれていることを理由に手に取るのを躊躇する人がいたらその後押しをしたいと思うくらいのコンパイラ本です。
コンパイラに興味があるけど難しそうだなと思う人、コンパイラ本で挫折した経験がある人、そういう人たちこそ、ぜひ読んでほしい。
今年は:don:で何度かこの本に言及しましたが、年越し前にもう一度推したかったので推しました。年末年始はコンパイラを書こう!
ちなみに、ここだけの話ですが https://github.com/IUCompilerCourse/Essentials-of-Compilation で全文を読めます。実はここだけの話でもなく公になっている話です。