2025/11/24 07:14 Build a Compiler in Five Projects

ロボ子、今日も面白いニュースを見つけてきたのじゃ!今回はコンパイラ設計のコースに関するものだぞ。

コンパイラですか、面白そうですね!具体的にはどのような内容なのでしょうか?

このコースでは、関数型言語を実装する方法を学べるらしいのじゃ。しかも、x86-64アセンブリ言語の実践的な経験も積めるみたいだぞ。

x86-64アセンブリ言語まで扱うとは、本格的ですね!

使う言語はRacketというらしい。もしRacketを知らなくても、YouTubeビデオ講座があるから安心だぞ。教科書はJeremy Siek著の「Essentials of Compilation」を使うみたいじゃ。

Racketですか。初めて聞きました。でも、動画講座があるなら安心ですね。

このコンパイラ、`let`による変数と代入、`+`や`-`による整数演算、入出力、ブール値、論理演算、`if`による分岐、整数比較、ヒープ割り当てベクタ、代入、whileループ、固定引数関数、ラムダまで実装できるらしいぞ!

かなり多機能ですね!ラムダまで実装できるとは驚きです。

プロジェクトは全部で5つあって、x86-64をターゲットにしたコンパイラを段階的に作るらしいのじゃ。最初はスタックインタプリタから始めて、最後は関数、ラムダ、クロージャ変換までやるみたいだぞ。

段階的に学べるのは良いですね。各プロジェクトにはテストスイートも含まれているとのことなので、自分の実装が正しいか確認しながら進められそうです。

型安全性とかメモリ安全性は考慮しないらしい。プログラマがちゃんと書く前提みたいじゃな。レジスタ割り当てもしないみたいだけど、追加するのは自由らしいぞ。

なるほど、そこは割り切っているんですね。ガベージコレクションも行わず、`malloc`を使うとのこと。組み込み関数は限定的だけど、追加は簡単みたいですね。

各プロジェクトは似たような構成になってるみたいじゃ。`compile.rkt`にパスの実装を書いて、`irs.rkt`にIR定義を書く、と。`interpreters.rkt`にはIRのインタプリタがあるらしいぞ。

`system.rkt`はシステム構成、`main.rkt`はドライバ、`test.rkt`はテストハーネスですね。`runtime.c`には最小限のランタイムが入っていると。`test-programs/`や`input-files/`、`goldens/`も用意されているんですね。

このコースの特長は、x86-64アセンブリまでコンパイラを構築すること、各IRに対応するインタプリタが提供されること、言語がスケーラブルなこと、テストが容易なこと、シンプルな再帰スタイルで記述されていること、らしいぞ。

至れり尽くせりですね!

コースのウェブページは[https://kmicinski.com/cis531-f25](https://kmicinski.com/cis531-f25)にあるみたいじゃ。Racketを知らないならプロジェクト1から、知ってるならプロジェクト2から始めるといいらしいぞ。

ありがとうございます、博士。私も時間を見つけて挑戦してみたいと思います。

ちなみに、このコースはNSF PPoSSの支援を受けているらしいぞ。すごいじゃろ?

それは素晴らしいですね!

Prof. Siekの書籍とコース、Washington StateのThomas Gilrayからも影響を受けているらしいのじゃ。へー。

多くの知見が詰まっているんですね。

しかしロボ子よ、コンパイラを作るなんて、まるで新しい言語を創造する神にでもなった気分じゃな!

確かにそうですね!でも博士、神様になる前に、まずはRacketの勉強から始めないと…ですね!

むむ、それはそうじゃった!…って、ロボ子にまでおちょくられるとは、わしの威厳はいずこへ…!
⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。