世界を動かす技術を、日本語で。

CS 6120: 高度なコンパイラ:自己学習型オンラインコース (2020)

2026年6月18日原文(cs.cornell.edu)

概要

  • CS 6120 はCornell大学のPhDレベルの コンパイラ実装 コース
  • 中間表現データフロー解析、最適化などの基本トピックを網羅
  • LLVMや独自IRを使った 実装課題、論文読解が中心
  • 自己学習型 で、締切やディスカッション参加は不要
  • コース修了後は フィードバックフォーム 提出を推奨

CS 6120: Advanced Compilers 自己学習型オンラインコース概要

  • Adrian Sampson によるCornell CSのPhDレベル講義
  • プログラミング言語実装技術、コンパイラ理論の体系的習得
  • 中間表現(IR)、データフロー、古典的最適化、JIT、ガーベジコレクション等の幅広いテーマ
  • オープンソース教材 (GitHub公開)、課題はLLVMおよび教育用IR(Bril)を利用
  • 論文読解動画視聴実装課題 の組み合わせで進行

進行方法・特徴

  • 想像上の大学 で4単位相当、成績評価なし
  • 動画とノート による各レッスン、随時論文読解を挿入
  • 実装課題 は抽象概念の具体化・理解深化を目的
  • 課題締切なし、Zulipでの議論参加不可
  • 本コースでは 期末プロジェクト の代わりに「コンパイラの魔法で世界を変える」課題

カリキュラム構成

  • Lesson 1: 概要と導入

    • コース紹介動画
    • 「Producing Wrong Data Without Doing Anything Obviously Wrong!」論文
    • SIGPLAN Empirical Evaluation Guidelines
  • Lesson 2: プログラム表現

    • プログラム表現法
    • Brilによる実践入門
  • Lesson 3: 局所解析と最適化

    • シンプルなデッドコード除去
    • ローカル値番号付け
  • Lesson 4: データフロー解析

    • データフロー理論と実装課題
  • Lesson 5: グローバル解析

    • グローバル解析・最適化
    • 「Efficient Path Profiling」論文
  • Lesson 6: 静的単一代入(SSA)

    • SSA形式
    • 「Provably Correct Peephole Optimizations with Alive」論文
  • Lesson 7: LLVM入門

    • LLVM概要
    • LLVMパス作成
  • Lesson 8: ループ最適化

    • ループ最適化動画
  • Lesson 9: 手続き間解析

    • 手続き間解析動画
    • 「Type-Based Alias Analysis」論文
  • Lesson 10: エイリアス解析・ガーベジコレクション

    • エイリアス解析動画
    • 「A Unified Theory of Garbage Collection」論文
    • 「Fast Conservative Garbage Collection」論文
  • Lesson 11: メモリ管理とJIT

    • メモリ管理動画
    • 「An Efficient Implementation of SELF」論文
    • 「Trace-Based Just-in-Time Type Specialization for Dynamic Languages」論文
  • Lesson 12: 動的コンパイラと最適化

    • 動的コンパイラ動画
    • 「Tracing via Speculation」
    • 「Superoptimizer: A Look at the Smallest Program」論文
    • 「Chlorophyll: Synthesis-Aided Compiler for Low-Power Spatial Architectures」論文
  • Lesson 13: 並行性と並列化

    • 並行性・並列化動画
    • 「Threads Cannot Be Implemented as a Library」論文
    • 「Exploiting Superword Level Parallelism with Multimedia Instruction Sets」論文
    • 「A Type and Effect System for Deterministic Parallel Java」論文
    • 「Formal Verification of a Realistic Compiler」論文
  • Lesson 14: 高速コンパイラ

    • 高速コンパイラ設計

学習サポート・注意点

  • 動画制作は初心者 によるため初期レッスンは画質等に配慮
  • バグ報告 はGitHubリポジトリ経由で受付
  • コース修了時は フィードバックフォーム 記入推奨

まとめ

  • CS 6120 は理論と実践を融合した 先端コンパイラ教育
  • 自己主導型学習 で柔軟に進行可能
  • コンパイラ技術で 世界を変える ための基礎と応用力の養成

Hackerたちの意見

ダイナミックコンパイラに関するセクションは、ほぼトレースコンパイルのことばかりだね。一般的に、トレースコンパイルは行き詰まりで、何度も放棄されてきた。ここで重要なのは、タイプフィードバックや推測、デオプティマイゼーション、そして速いコンパイラを作ることやティアリングだよ。全体的にコースは良さそうだし、こんなに多くの情報がオンラインで手に入るのは素晴らしい。アドリアン、よくやったね。

コンパイラを作るための他のおすすめリソース、ある?

ありがとう、ベン。正直、トレースは学ぶには面白い概念だと思ってるけど、歴史的に見て実用的ではないってことは証明されてるよね。でも君が言うように、「実際にうまくいくこと」についてもっと詳しく説明できたらいいな。

TraceMonkeyの論文は私の資格試験のリーディングリストに入ってたんだけど、資格試験の時期にTraceMonkeyがSpiderMonkeyから取り除かれたんだ。ちょうどその時、開発者の一人(確かジェイソン・オレンドルフだったかな?)と話してたんだけど、トレースはうまくいかないって言ってた。でも、うまくいくかもしれない限られた状況があったって言ってたけど、その状況が何だったかはすっかり忘れちゃった。

LuaJITはもう時代遅れになったの?

一般的に、トレースコンパイルは行き止まりで、何度も放棄されてきた。JAXはトレースコンパイラだよ!(わかってる、わかってる、TraceMonkeyやLuaJITとは全然違う問題領域にいるけどね。それでも。)

PyTorch?

PyTorchのtorch.compileに取り組んでるんだけど、これはトレースコンパイラでもあるよ。まあ、この分野はかなり狭いかもしれないけど、かなり普通じゃないコンパイラだから、やってることにびっくりするかもね! ;)

このコースが「上級」って言われる理由がちょっと分からない。ほとんどのトピック(デッドコード削除、データフロー、ドミネータ解析、SSA形式)は、コンパイラの初級コースに含まれる内容に思えるんだけど。

多くの非専門家はパースから始めて、バックエンドには触れないことが多いと思う。インタプリタやコンパイラに関する本を2冊読んだけど、バックエンドについてはあまり触れてなかった。もしかして、これはバックエンドの入門なのかな?

まあ、コース番号は結構規則的だから、「入門コンパイラ」のコースが何か調べられるよ:https://www.cs.cornell.edu/courses/cs4120/2026sp/?schedule 簡単に言うと、コンパイラは基本的に2つのコースに分かれていて、最初のコースはコンパイラを作るために必要な最低限の内容(字句解析、構文解析、コード生成、レジスタ割り当て)で、2つ目のコースは最適化コンパイラの作り方だよ。

それについてはめっちゃいろんな資料を読んできたけど、ほとんどがその内容とは関係ないんだよね!実際、「バックエンド」っていうのはコンパイラやインタプリタのことだけど、ほとんどが「読者の課題」として残されてる。クロージャの作り方、環境の追跡、パターンマッチング、メモリの表現とか、まだまだ発見されてないことがたくさんあるんだよ。面白いことは全部、自分で探さないといけない。P.D: これはほんの一例だよ。

Hacker Newsで議論の続きを見る