コンパイラ作成を学ぶなら読むべき2つの論文

原題: Want to Write a Compiler? Just Read These Two Papers (2008)

なぜ重要か

コンパイラ作成の学習障壁を下げる実用的な教材を紹介し、プログラミング言語開発やDSL実装の普及に貢献する可能性がある。

プログラミング経験者のJames Hagueが2008年に執筆した記事で、コンパイラ作成の学習に最適な2つの資料を紹介。Jack CrenshawのLet's Build a Compilerシリーズと、SarkarらによるNanopass Frameworkの論文を推奨し、従来の難解な教科書よりも実用的なアプローチを提案している。

この記事は、コンパイラ作成の学習における従来の教科書の問題点を指摘し、より実用的なアプローチを提案している。著者は、多くのコンパイラ関連書籍が範囲が広すぎて、正規表現から実行可能な状態機械への変換や異なる文法タイプなど、膨大な情報を含むため、実際にコンパイラを作成するまでに至らないと批判している。

最初に推奨されるのは、1988年に開始されたJack CrenshawのLet's Build a Compilerシリーズ。これはTurbo Pascalクラスのコンパイラに焦点を当て、単一パス、構文解析とコード生成の混在、基本的な最適化のみを適用する簡潔なアプローチを採用している。元はPascalで実装されていたが、C版も存在し、Marcel HendrixによるForth版も利用可能である。

2つ目の資料は、Sarkar、Waddell、DybvigによるA Nanopass Framework for Compiler Educationという論文。この論文は、コンパイラをプログラムの内部表現の一連の変換として捉える概念を提示している。著者らは数十から数百のコンパイラパスを使用し、各パスを可能な限りシンプルに保つことを推奨している。変換を組み合わせず、分離して保つことが重要であると強調している。

記事の著者は、Python、Ruby、Erlang、Haskell、Lispなどの高級言語を使用することで、抽象構文木の操作が容易になると指摘している。これらの資料で学習した後、Dragon Bookなどの伝統的な教科書を購入することを検討できるが、必要ない場合もあるとしている。

出典

prog21.dadgum.com — 元記事を読む →