解決方案
2000 年,在伊利諾大學厄巴納-香檳分校,Vikram Adve 與 Chris Lattner 展開了一項關於動態編譯的研究計畫。其 2004 年的 CGO 論文〈LLVM: A Compilation Framework for Lifelong Program Analysis & Transformation〉描述了一種具型別的中間表示法,以及一套編譯器框架;論文聲稱,這種能力組合是既有編譯方法都無法提供的。
決定性的舉措是模組化加上開放性。LLVM 不是單一龐大的編譯器,而是以函式庫為基礎的基礎設施:前端將原始碼轉譯為 LLVM IR,後端將該 IR 轉為機器碼,而最佳化 pass 則在兩者之間共用。它以自由、開放原始碼軟體的形式發佈,因此能嵌入商業產品而不產生法律摩擦。
採用情況依循經濟邏輯而來。Apple 於 2005 年聘用 Lattner,並讓 LLVM 成為 macOS 與 iOS 上 Xcode 不可或缺的一部分;Intel 將 LLVM 描述為生產級品質的編譯器基礎設施,其自家編譯器會重複使用其中的元件,並以 LLVM IR 為目標以實現可攜性。由於中間層是共用的,整個生態系便不再重複重建它。
達成了什麼
把編譯器當成可重複使用的函式庫來建構,而非單體式系統
為何奏效
具型別的 IR 將前端與後端分離,因此一套基礎設施就能服務所有語言。
寬鬆的授權讓企業能嵌入它而不產生法律摩擦。
函式庫元件意味著廠商可重複使用經過測試的程式碼,而不必重寫。
Apple 的採用讓它進入數百萬名開發者的預設工具鏈之中。
可借鏡之處
要贏得生態系,就掌握中間層:一個授權寬鬆、可重複使用的編譯器核心,意味著每個語言前端與機器後端都共用同一個經過測試的最佳化引擎。
後續發展
LLVM 及其 Clang 前端成為 Apple 平台以及從 Rust 到 Swift 等語言的預設編譯器堆疊,而 Intel 的 oneAPI 編譯器也建構於其上——可重複使用的中間層贏得了編譯器生態系。如今新的語言專案通常理所當然地以 LLVM 作為其目標。
追溯依據
參考來源
- LLVM: A Compilation Framework for Lifelong Program Analysis & Transformation (CGO'04) LLVM Project · llvm.org
- Get to Know LLVM Intel · intel.com
- LLVM Wikipedia · en.wikipedia.org