EN
返回档案库

案例库 · 软件与 IT · 技术决策 · 2000–2011

LLVM 通过发布可复用的 IR 赢得编译器之争,任何语言都能以此为后端

LLVM(伊利诺伊大学厄巴纳-香槟分校,2000 年)将编译器做成围绕统一类型 IR 的可复用库;苹果和英特尔采用后,它成为行业共享的后端。

LLVM 项目 · 伊利诺伊大学厄巴纳-香槟分校 · 苹果 · 英特尔

解法

2000 年,在伊利诺伊大学厄巴纳-香槟分校,维克拉姆·阿德维和克里斯·拉特纳启动了一个关于动态编译的研究项目。2004 年他们在 CGO 会议上发表的论文《LLVM:面向终身程序分析与转换的编译框架》描述了一种带类型的中间表示及其编译框架,并声称该框架的能力组合是现有编译方法无法提供的。

决定性的举动是模块化加开放。LLVM 不是单体编译器,而是一套基于库的基础设施:前端把源代码翻译成 LLVM IR,后端把 IR 变成机器码,中间的优化处理在两者之间共享。它以免费、开源软件的形式发布,可以嵌入商业产品而无需担心法律问题。

采纳行为遵循经济逻辑。苹果在 2005 年聘请拉特纳,并让 LLVM 成为 Xcode 在 macOS 和 iOS 上的核心组件;英特尔则称 LLVM 是生产级编译基础设施,其自有编译器会复用它,并以 LLVM IR 作为目标来实现可移植性。因为中间层共享,整个生态系统就不必再重复造轮子了。

生效的原因

  • 带类型的 IR 把前端和后端分开,所以同一套基础设施能服务所有语言。
  • 宽松的许可证让公司可以无法律负担地嵌入它。
  • 库组件意味着厂商复用经过测试的代码,而不是重写。
  • 苹果的采用让它进入了数百万开发者的默认工具链。
取得的成效把编译器做成可复用的库,而不是单体聪明

可借鉴之处

占据中间层以赢得生态:一个采用宽松许可证的可复用编译器核心,能让每种语言前端和机器后端共享同一套经过测试的优化引擎。

后续进展

LLVM 及其 Clang 前端成为苹果平台以及从 Rust 到 Swift 等语言的默认编译器栈,而英特尔的 oneAPI 编译器也基于它构建——可复用的中间层赢得了编译器生态。现在,新语言项目通常默认把 LLVM 作为目标。

资料来源

发现哪里写错了?告诉我们。

相关案例