跳轉到

編譯器史 -- AI 偵探風格#

以「推理探案」的方式,追查編譯器與直譯器從 1943 年 Plankalkül 到今日 WebAssembly、MLIR 與 AI 輔助編譯的每一步: 前因是什麼?線索在哪裡?推理如何展開?後果又如何改變了整個資訊文明?

(涵蓋:語言設計、詞法/語法/語意分析、優化、代碼生成、直譯器與 JIT、編譯基礎設施)

案件卷宗(歷史年表)#

編譯器概念的誕生(1943–1957)#

年份 事件 檔案
1943 Zuse 的 Plankalkül——紙上語言,遠超時代 1943-Plankalkül.md
1952 Grace Hopper 的 A-0——「compiler」一詞的誕生;同年 Böhm 的自述式編譯器 1952-GraceHopperA0編譯器.md
1957 Backus 的 FORTRAN——第一個優化編譯器,高階語言的勝利 1957-FORTRAN與優化編譯器.md

語言與理論的黃金年代(1958–1968)#

年份 事件 檔案
1958 McCarthy 的 LISP——直譯器、eval/apply 與垃圾回收 1958-LISP.md
1960 ALGOL 60 報告與 BNF 范式——形式語法規格的典範 1960-ALGOL60與BNF.md
1965 Knuth 的 LR(k) 理論——確定性上下文無關文法可判定 1965-LR解析.md
1968 Dijkstra 的 "Go To Considered Harmful" 與結構化程式 1968-結構化程式與GoTo.md

工具化與可攜性(1970–1977)#

年份 事件 檔案
1970 Wirth 的 Pascal 與自舉(bootstrapping)/ P-code 1970-Pascal與自舉.md
1972 Ritchie 的 C——BCPL/B/C 演進與可攜編譯器 1972-C編譯器與可攜性.md
1975 Johnson 的 Yacc 與 Lesk 的 Lex——parser generator 工程化 1975-Yacc與Lex.md
1977 Aho–Ullman 的龍書——編譯器方法學的聖經 1977-龍書.md

優化與硬體協同設計(1980–1987)#

年份 事件 檔案
1980 Patterson 與 Hennessy 的 RISC——編譯器驅動的硬體設計 1980-RISC與編譯器.md
1981 Chaitin 的圖著色暫存器分配 1981-圖著色暫存器分配.md
1987 Stallman 的 GCC——自由軟體的基石 1987-GCC.md

中間表示與動態編譯(1991–1995)#

年份 事件 檔案
1991 Cytron 等人的 SSA 形式——現代優化的通用 IR 1991-SSA形式.md
1995 Java 與 JIT——HotSpot、直譯 + 剖析 + 投機編譯 1995-Java與JIT.md

基礎設施與新戰場(2000–至今)#

年份 事件 檔案
2000 Lattner 的 LLVM——編譯器變成樂高積木 2000-LLVM.md
2017 WebAssembly(2017)與 MLIR(2019)——瀏覽器與多層級 IR;AI 輔助編譯接棒 2017-WebAssembly與MLIR.md

破案主線一覽#

  1. 可行性之戰(1943–1957):從紙上語言到「效率逼近手寫」的 FORTRAN,證明高階語言值得用。
  2. 理論化(1958–1965):Chomsky 層級 → BNF → LR(k),把「翻譯」變成可判定的數學問題。
  3. 工程化(1970–1977):自舉、可攜、parser generator,編譯器從手工藝變成工程。
  4. 協同設計(1980–1991):RISC 與圖著色,證明硬體與編譯器必須一起設計;SSA 統一優化理論。
  5. 動態化(1995–2000):JIT 融合直譯器與編譯器——「先觀察、再投機、錯了退回」。
  6. 基礎設施化(2000–至今):LLVM 樂高化、WebAssembly 通用執行環境、MLIR 多層級 IR,最後 AI 上場找更快的代碼。