
2026/06/18 20:04
CS 6120:高度なコンパイラ:自己誘導型オンラインコース(2020)
RSS: https://news.ycombinator.com/rss
要約▶
Japanese Translation:
この自己指導バージョンのアドリアン・サンプソンの「高度なコンパイラ(CS 6120)」は、LLVM とカスタムの教育的な中間表現(IR)を用いて実際のコンパイラを構築する際に、博士課程レベルの洞察を提供します。公式のコルネル大学のクラスとは異なり、この柔軟な反復形式では試験での評価を 4 つの「想像力クレジット」で置き換え、厳格な期限設定を排除し、 Zulipディスカッションスレッドへの参加や学期末のプロジェクトからの除外を行います。代わりに、学習者は抽象的な理論—from プロガムの基本的な表現とデータフロー解析から、ガベージコレクション、Just-In-Time (JIT) コンパイル、並行性、静的単一代入といった高度なトピックまで—を実際のコードに変換することに焦点を当てます。カリキュラムは、ビデオ、ノート、オープンソースのハッキングタスクが含まれる線形の時系列としてのレッスンとして構造化されており、各モジュールを特定の学術論文(例:トッド・マイトコウィッチ、ザヴィエール・レロイ、デビッド・F・ベーコン氏の作品)と直接接続しています。講師がビデオ制作の経験を持たないため、早期レッスンの品質がばらつく可能性がありますが、 GitHub に完全にオープンソース化された教材はバグ報告を通じてコミュニティによる改善を歓迎します。学習者はコース完了時にフィードバックフォームへの記入を推奨され、コンパイラのメカニズムを Mastery して「ソフトウェア最適化を通じて世界を変革する」ことを目指すよう促されます。最終的にはレッスン 14「高速コンパイラ」で締めくこられます。
本文
CS6120:高度なコンパイラ入門 —— 自己学習向けオンラインコース
コース概要
- 所属機関:コーネル大学(博士課程レベル)
- 講師:Adrian Sampson 氏
- 特徴:
- 中間表現(IR)、データフロー解析、古典的な最適化手法など、普遍的なコンパイラテーマを網羅。
- 並行化、JIT コンパイル、ガベージコレクションなどの研究的前沿的なトピックも含まれる。
- 学習内容:
- 論文の読み込みとオープンソースコードを用いた実装タスクで構成されている。
- 使用環境としてLLVMおよび本コース専用に設計された**教育用 IR(Bril)**を採用している。
履修方法について
- 単位設定:架空の大学における**4 単位(非評価)**のカリキュラムとしてリストアップしている。
- 進め方:
- 講義動画と論文が交互に配置されたタイムラインに沿って学習する。
- 各単元には映像コンテンツ、筆記資料、および一部の単元での実装課題が付属する。
- 課題の自由度:
- すべての課題に一定程度の自由度があり、抽象的な概念を実際のコードに変換することで理解を深めることを目的としている。
- 推奨パターン:提示された順序は、動画視聴と論文読解を効果的に交互に行うためのガイドラインです。
自己学習版との違い・注意事項
- 期限の柔軟性:実際のコースとの最大の違いとして、タスクの提出期限を無視することが可能である。
- ディスカッション:Zulip 上の議論スレッドへの参加はできません。
- 期末課題:
- 従来のプロジェクトではなく、「コンパイラの魔法によって世界を変えろ」というテーマで構成される。
- 画質・演出について:講師が動画制作の初心者であるため、特に初期講義における画質や演出面についてはご容赦ください。
コミュニティ貢献
- 本コースはオープンソースであり GitHub 上に公開されています。
- 問題を見つけた場合は、バグ報告のご協力をお願いいたします。
- 無事に修了された際には、フィードバックフォームからご感想をお寄せいただけますと幸いです。
カリキュラム詳細
第 1 講:歓迎と総論
- 「何も奇妙なことをせずとも間違ったデータを生成する!」
(Todd Mytkowicz, Amer Diwan, Matthias Hauswirth, Peter F. Sweeney 著、ASPLOS 2009) - SIGPLAN による経験的評価ガイドライン
第 2 講:プログラムの表現
- プログラムの表現について
- Bril(教育用 IR)への入門
第 3 講:局所解析と最適化
- シンプルな死コードエリミネーション
- 局所的な値数え上げ(Value Numbering)
第 4 講:データフロー解析
- データフロー解析の基礎
- 実装課題:データフロー解析の実践
第 5 講:グローバル解析
- グローバル解析と最適化
- 「Efficient Path Profiling」
(Thomas Ball と James R. Larus 著、MICRO 1996)
第 6 講:静的単独代入形式(SSA)
- SSA の概要
- Aliveを用いた証明可能なピープホール最適化
(Nuno P. Lopes, David Menendez, Santosh Nagarakatte, John Regehr 著、PLDI 2015)
第 7 講:LLVM の紹介
- LLVM の基本概念
- LLVM パスの書き込み実習
第 8 講:ループ最適化
- 動画講義
第 9 講:インタープロシージャ解析
- 動画講義
- 型に基づくエイリアス解析
(Amer Diwan, Kathryn S. McKinley, J. Eliot B. Moss 著)
第 10 講:エイリアス解析とガベージコレクション
- 動画講義
- 「Unified Theory of Garbage Collection」
(David F. Bacon, Perry Cheng, V. T. Rajan 著、OOPSLA 2004) - 「Fast Conservative Garbage Collection」
(Rifat Shahriyar, Stephen M. Blackburn, Kathryn S. McKinley 著、OOPSLA 2014)
第 11 講:メモリ管理
- 動画講義
- SELF(プロトタイプベースの動的型付けオブジェクト指向言語)の実装
(C. Chambers, D. Ungar, E. Lee 著、OOPSLA 1989) - 動的言語におけるトレースに基づくJIT タイプ特殊化
(Andreas Gal, Brendan Eich, Mike Shaver ら著、PLDI 2009)
第 12 講:動的コンパイラ
- 動的コンパイラの概要
- 推測に基づくトレーシング技術
- 「Superoptimizer: Smallest Program」
(Alexia Massalin 著、ASPLOS 1987) - 「Chlorophyll: Synthesis-Aided Compiler for Low-Power Spatial Architectures」
(Phitchaya Mangpo Phothilimthana, Tikhon Jelvis ら著、PLDI 2014)
第 13 講:並行性と並列処理
- 動画講義
- 「Threads Cannot Be Implemented as a Library」
(Hans-J. Boehm 著、PLDI 2005) - 「Exploiting Superword Level Parallelism with Multimedia Instruction Sets」
(Samuel Larsen, Saman Amarasinghe 著、PLDI 2000) - 「A Type and Effect System for Deterministic Parallel Java」
(Robert L. Bocchino ら著、OOPSLA 2009) - 「Formal Verification of a Realistic Compiler」
(Xavier Leroy 著、CACM 2009)
第 14 講:高速コンパイラへの展望
- コースのまとめと将来の方向性