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