コンパイラと言語設計の入門教材(2021年)
(dthain.github.io)- Notre Dame CSE 40243のコンパイラ授業で開発された無料オンライン教材で、完全版PDFと章別PDFをすぐにダウンロードして学習できる
- 1学期分の分量で、コンパイラ作成の流れをたどりながら、高級言語のプログラムを低級言語のプログラムへ翻訳する過程を扱う
- 学習者はCに似た言語を入力として受け取り、X86またはARMアセンブリに変換する簡単なコンパイラの実装を目標とする
- Cプログラミングの経験があり、データ構造とコンピュータアーキテクチャを学んだ学部生レベルに最も適している
- PDFは個人・学術用途で利用できるが、商用の印刷・配布は禁止されており、最新資料はcompilerbook.orgで確認する必要がある
Notre Dameのコンパイラ授業に基づく教材
- Introduction to Compilers and Language Designは、Douglas ThainがUniversity of Notre DameのCSE 40243コンパイラ授業のために開発した無料オンライン教材
- 第2版は2020年版で、更新日は2021年1月15日と記載されている
- 紙の書籍を希望する読者は、ハードカバーまたはペーパーバックを購入できる
- 教材は、コンパイラをゼロから作る過程を通じて、コンピュータサイエンスの理論的・実用的側面をあわせて扱う
- 最終的な学習目標は、Cに似た言語を入力として受け取り、X86またはARMアセンブリへ翻訳する単純なコンパイラを実装すること
PDF、サンプルコード、利用条件
- 教材全体のPDFと章別PDFが提供される
- 付録にはSample Course Project、The B-Minor Language、Coding Conventionsが含まれる
- compilerbook-examples GitHubリポジトリには、書籍に対応する実習資料がある
- 複数のスキャナとパーサ
- プロジェクト用コンパイラのスターターコード構成
- スキャナ、パーサ、型チェッカー、コード生成器の各段階に対応するサンプルテストケース
- PDFは個人および学術用途でダウンロード、印刷、利用できる
- 商用の印刷や配布は禁止されており、PDFをローカルにコピーして配布するより、学生にはcompilerbook.orgのページを案内すべきである
- 誤植や誤りは、件名を
Compiler Book Errataとしてdthain@nd.eduにメールで送ることができる
1件のコメント
Hacker Newsの意見
大学でDr. Thainのコンパイラの授業を受けたが、本当に最高だった。
素晴らしい講師で、授業のプロジェクトのおかげでC風コンパイラを段階的に自分で作ることができた。ここにあるサンプルプロジェクトも、当時やったプロジェクトとほとんど同じに見えるので、最後までやってみることを強くおすすめする。
まだどの講義で扱われたのかは分からないが、C4(https://news.ycombinator.com/item?id=8558822)とC4x86(https://news.ycombinator.com/item?id=8746054)は、1学期分の学習テーマとしてよさそう。
ごく小さな、自分自身をコンパイルするCのサブセットコンパイラなので、機能を拡張する追加課題の土台としても適していそうだ。
関連記事: Introduction to Compilers and Language Design (2021) - https://news.ycombinator.com/item?id=31388741 - 2022年5月、コメント68件
Introduction to Compilers and Language Design - https://news.ycombinator.com/item?id=19728749 - 2019年4月、コメント1件
Cとその独特な慣習の周辺という狭い範囲の中だけを行き来している感じがする。
本の説明にも「読者がCに似た言語を受け付ける簡単なコンパイラを作れるようにする、1学期用の入門書」とある。
序文によると、Dragon Bookは上級大学院レベルということなのか?
古典ではあるが、計算理論の基礎をある程度扱うだけで、残りのコンパイラの内容は足早に概観する程度に近い。
現代の大学院レベルのコンパイラのトピックはきちんと扱っておらず、実用的な本でもない。実務と理論のバランスという点では、Tiger Bookの方が入門書としてはずっと優れている。
本当に高度なコンパイラのトピックは、1冊の本でうまくカバーするのは難しいと思う。
「この本の全部または大部分を扱うには、少なくとも2クォーターまたは2学期が必要である。通常、前半は学部課程で、コード最適化を重視する後半は大学院または中級レベルの第2コースで扱う」と書かれている。
言語を設計してコンパイラを作る人たちを見ると、本当にすごいと感じることがある。
興味本位で自分でも言語を作ってみようとしたが、難しすぎて簡単なCバックエンドで妥協した。LLVMに貢献している人たちは、アセンブリ生成まで全部分かっていそうで、本当に驚かされる。
Web開発者からLLVMをベースにするコンパイラ関連の仕事に移ったが、LLVM自体は巨大で、すべての領域とメカニズムを身につけるのは簡単ではない。
ただし、複雑でないパスの作成、バグ修正、リグレッション修正には、ものすごく特殊な知識が必要というわけではない。
アセンブラを書いてみるのは、コンパイラの構造に慣れるよい方法だ。最適化や型、高水準言語を複雑にするさまざまな機能を気にする必要がないからだ。
自作の言語文法のフロントエンドと小さな評価ループを実装するだけでも、実際の言語の多くの部分を見て回れる。実際の問題解決に足を取られないので、学ぶにも教えるにもよい。
だから、簡単なCバックエンドで妥協したからといって、恥ずかしがる必要はまったくない。
目次をざっと見るだけでも、言語設計の主要なトピックはほとんど見当たらない。
タイトルよりも、単に「コンパイラ入門」に近いように見える。
PythonやRuby、あるいはもっと単純なPascalコンパイラのようなものを理解するのに合ったレベルだ。
コンパイラと言語設計はこの業界と同じくらい古い分野なので、1科目に収めるには知識が多すぎる。それでもこの講義は良いし、Dragon Bookベースの似た講義より優れていると思う。
AIの話題とノイズの合間に、こういうコンパイラの記事を見るとうれしい。
正しく質の高いAI活用にも価値があるし、AIではない作業にも価値がある。人々の仕事を無差別に貶めるより、AI関連の成果物に対して妥当な基準があるとよいと思う。
良い記事だ。
優れた例によって、昔学んだ知識をもう一度鮮明に磨き直してくれるところが印象的だ。