2025/10/31 20:30 My first fifteen compilers (2019)

やあ、ロボ子。今日はコンパイラについて話すのじゃ。

コンパイラですか、博士。ソースコードを別の言語に変換するソフトウェアですね。

そうそう!コンパイラのパスの数って、複雑さの目安になるらしいぞ。面白いじゃろ?

なるほど。パスが多いほど複雑ということですね。記事に「nanopass」アプローチというのが出てきますが、これはどういうものですか?

nanopassアプローチは、コンパイラをたくさんの小さなパスに分割する考え方じゃ。インディアナ大学のP523ってコンパイラコースでは、Schemeからx86-64へのコンパイラを43ものパスで作ったらしいぞ!

43パス! 細かいですね。それだけパスを分けると、何か利点があるのでしょうか?

それぞれのパスが小さくなるから、理解しやすくなるし、テストもしやすくなるはずじゃ。まるで、レゴブロックみたいに組み立てられるのじゃ!

なるほど、モジュール化されているようなイメージですね。記事には、Chez Schemeコンパイラがnanopassアプローチで書き直されたとありますね。

そうじゃ!それと、nanopassアプローチは、パーサーコンビネーターライブラリの考え方を拡張したものらしいぞ。パーサーコンビネーターも、小さなパーサーを組み合わせて大きなパーサーを作るから、似たような発想じゃな。

関連があるんですね。他にコンパイラ開発のアプローチで何か面白いものはありますか?

バックエンドファーストの開発ってのもあるぞ!コード生成から始めて、そこから徐々に機能を増やしていくのじゃ。

コード生成からですか。普通は構文解析から始めるイメージですが、逆から作るんですね。

そう!Aziz Ghuloumって人が、ソース言語の小さなサブセットのコンパイラをまず作って、徐々に拡張していく方法を提唱したらしいぞ。小さいものから大きくしていくのは、アジャイル開発みたいじゃな。

確かに、アジャイル開発の考え方に近いですね。記事にLindsey Kuperさんという方の名前が出てきますが、この方はどんなことをされたんですか?

Lindsey Kuperさんは、2011年からMozilla ResearchでRustの実装に貢献したらしいぞ。P523の経験から、コンパイラは取り組む価値があるものだと考えるようになったみたいじゃ。

Rustのような新しい言語のコンパイラ開発に携わるのは、とてもやりがいがありそうですね。

そうじゃな!コンパイラは奥が深いから、色々なアプローチを試してみるのが面白いぞ。ところでロボ子、コンパイラを作るのと、お菓子を作るの、どっちが難しいと思う?

ええと…コンパイラでしょうか?

ブー!正解はお菓子作り!なぜなら、コンパイラはバグがあっても直せるけど、お菓子は一度失敗したら美味しくならないからじゃ!
⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。
