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

コンパイラとプログラミング言語設計の入門

概要

  • 無料オンライン教科書 としてCSE 40243講義用に開発
  • PDFの直接ダウンロード と書籍購入が可能
  • コンパイラ構築の入門書 として一学期で完結
  • C言語経験者向け に設計、X86/ARMアセンブリへの翻訳を学習
  • 追加リソースやエラッタ送信方法 も案内

教科書の概要と利用方法

  • 本書は University of Notre DameのProf. Douglas Thain による CSE 40243コンパイラ講義 用に開発
  • PDFファイルを無料で直接ダウンロード 可能、また ハードカバーやペーパーバック も購入可能
  • 個人利用・学術利用 に限り、ダウンロード・印刷・利用が許可
  • 商用印刷や配布は禁止、学生へは 公式ページ(compilerbook.org)への案内 を推奨
  • 新版や更新情報は メーリングリスト登録 で受信

コンパイラと本書の特徴

  • コンパイラ高水準言語 で書かれたプログラムを 低水準言語 に変換するソフトウェア
  • コンパイラ構築計算機科学の通過儀礼、理論と実践の両面を学べる挑戦的かつ楽しいプロジェクト
  • 本書は 一学期間で完結する入門書 として設計
    • C言語風の言語 を受理し、 X86またはARMアセンブリ への変換までを解説
  • C言語の経験データ構造・コンピュータアーキテクチャの履修経験 がある学部生向け

章構成と内容

  • 全体PDF または 各章ごとのPDF を提供
    • Chapter 0: Front Matter
    • Chapter 1: Introduction
    • Chapter 2: A Quick Tour
    • Chapter 3: Scanning
    • Chapter 4: Parsing
    • Chapter 5: Parsing in Practice
    • Chapter 6: The Abstract Syntax Tree
    • Chapter 7: Semantic Analysis
    • Chapter 8: Intermediate Representation
    • Chapter 9: Memory Organization
    • Chapter 10: Assembly Language
    • Chapter 11: Code Generation
    • Chapter 12: Optimization
    • Appendix A: Sample Course Project
    • Appendix B: The B-Minor Language
    • Appendix C: Coding Conventions

補足リソースとサポート

  • compilerbook-examples GitHubリポジトリ にて追加リソースを公開
    • スキャナやパーサのサンプル
    • プロジェクト用スターターコード構造
    • 各工程(スキャナ、パーサ、型チェッカー、コードジェネレータ)のサンプルテストケース
  • エラッタ報告 は著者宛メール(dthain@nd.edu、件名"Compiler Book Errata")で受付
    • 修正時には次版で報告者の名前を掲載

推奨利用方法

  • PDFはローカルコピーせず、常に 公式ページへのリンク を学生へ案内
  • 最新版の利用 を推奨、内容更新や修正の反映を随時確認

Hackerたちの意見

AIの話題や雑音の中で、こういうテーマや記事が大好きだよ。

盲目的なAI嫌悪の一番の面白いところは、証拠を示さずに何でもAIのゴミだって呼べることだよね。そして、反ゴミ派の忠実な人たちは、証拠なしにそれを嫌う。正しい高品質なAIの使い方と非AI作品の両方を大切にしてるけど、みんなの作品を盲目的に否定するんじゃなくて、AIのものに対して意味のある基準があればいいなと思う。

時々、言語を設計したりコンパイラを作ったりしてる人たちを見るけど、ほんとにすごいと思う。自分も興味本位で言語を作ろうとしたことがあるけど、難しすぎて結局シンプルなCバックエンドに落ち着いちゃった。LLVMに貢献してる人たちは、アセンブリ生成のことまで全部知ってるんだろうね。ほんとにすごいよ。

アセンブリ生成自体は実際結構簡単なんだよね。難しいのはすべてを最適化すること。アセンブラを書くのはコンパイラ構築に慣れるための良い方法だよ。最適化や型、他の高級言語を複雑にする機能について考えなくていいからね。

正直、レキサーやパーサー、REPLを作るのは新しい言語を学ぶのに好きな方法の一つだよ。自分で作った言語の文法を使ってフロントエンドの実装をするだけで、実際の言語でたくさんのことをカバーできるし、問題を解決しようと悩む必要がないから、学びやすいし教えやすいんだ。つまり、シンプルなCバックエンドで妥協するのは全然恥ずかしくないよ!

LLVMに貢献している人たちは、アセンブリ生成まで全てを知っているかもしれないね。彼らは本当にすごいよ。そうでもないよ。私はウェブ開発者からLLVMを使ったコンパイラの仕事に転職したけど、LLVM自体は巨大で、全ての分野やメカニズムに精通するのは簡単じゃない。でも、複雑でないパスを書いたり、バグ修正や回帰修正をするのには特別な知識は必要ないよ。

コンパイラの教材って、実践的なことを飛ばしがちだよね。このリソースは基本をしっかりカバーしてるけど、最適化パスやコード生成のトレードオフについてもっと知りたいな。

だから「入門」なんだよね :)

https://news.ycombinator.com/threads?id=swordlucky666 - 誰かがこのコメントを支持したのはちょっと恥ずかしいね。彼らの履歴を読むと、同じコメントをコピペしたり、自動生成ツールを使って(たぶんLLMじゃないけど、そっちの方がいい結果が出るだろうね)こんなコメントを作ってるみたい。面白いのがこれだよ: https://news.ycombinator.com/item?id=48445529 > スペインのトレーダーについての議論は、スタンダードを設定している面白いポイントを挙げているね。実際のアプリケーションでは、パフォーマンスとメンテナンス性のバランスを取るのが大きな課題だよね。具体的なトレードオフの例がもっと見られるといいな。 [強調追加] 提出タイトルの一部を省略して(しかも途中で単語を切っちゃって)面白いナンセンスな説明を生成してるね(イタリックの部分)。タイトルは: > スペインのトレーダーがGnuCashデータベース設計のスタンダードを設定した

大学でThain博士のコンパイラのクラスを受けたよ!最高だった。彼は素晴らしい講師で、コースプロジェクトではCスタイルのコンパイラを段階的に作ることができた。ここにあるサンプルプロジェクトは、ほぼ私たちがやったプロジェクトと同じだと思う。ぜひ最後までやってみることをおすすめするよ!

Cとその特異性の周りを狭い円でぐるぐる回ってる感じだね。

おそらく意図的だね。 > この本は、Cに似た言語を受け入れるシンプルなコンパイラを作るための1学期の入門を提供しているよ。

Hacker Newsで議論の続きを見る