LLVM
英文作者:Chris Lattner
原文链接:LLVM
这一章讨论一些有关构成 LLVM1 的设计决策,是一个 umbrella 项目承载和开发了一套联系紧密低级工具链组件(例如, 汇编器、编译器、调试器等等),被设计来与 Unix 系统上的存在的工具保持兼容。名称 "LLVM" 曾今是一个首字母缩写,但是现在只是 umbrella 项目的商标(brand)。同时 LLVM 也提供一些独有的能力,也因为一些伟大的工具(例如 Clang2 编译器,是一个相比 GCC 有很多优点的 C/C++/Objective-C 编译器),使得 LLVM 同其他编译器区别开来的主要是它的内部架构。
从2000年十二月开始,LLVM 被设计作为一套具有良好定义接口的可重用库[LA04]。在那个时候,开源编程语言的实现被设计作为特殊目的的工具,通常具有单个可执行文件。例如,从一个静态编译器(例如 GCC)重用解析器(parser)来做静态分析和重构是非常困难的。同时脚本语言经常提供一种把它们的运行时和解释器(runtime and interpreter)嵌入到更大的应用程序之中的方法,这个运行时就是一个单独的代码块被包含或者排除。没有方法可以做到跨语言实现的重用和共享。