什么是LLVM,为什么它突然如此受欢迎?

时间:2017-01-05 01:59:48

标签: c compilation llvm

最近几个月,我一直看到提及" LLVM"到处都是。我查了一下,但对现代编译器基础设施的描述"并没有真正告诉我任何事情。除了一些提到它的c编译器之外,我找不到更多关于它的东西(它似乎与其他任何C编译器没有任何不同。)

这个LLVM事物与任何其他编译器(例如GCC)之间是否存在一些差异?或者是否因为比竞争对手更新而受到过度炒作?

1 个答案:

答案 0 :(得分:15)

有一些关于此事的学术文献,I recommend the AOSA book chapter on it,由主要作者(Chris Lattner)撰写。

LLVM是为支持编译器开发和相关任务而构建的库的集合。每个库都支持典型编译器管道中的特定组件(lexing,解析,特定类型的优化,特定体系结构的机器代码生成等)。它如此受欢迎的原因在于其模块化设计使其功能可以非常容易地进行调整和重用。当您为现有语言开发编译器以针对新的硬件体系结构时,这很方便(您只需要编写特定于硬件的组件,所有的lexing,解析,机器独立优化等都可以为您处理)或者为新语言开发编译器(所有后端的东西都是为你处理的),或者当你在相邻的东西上做一些事情时(比如分析源代码,在更大的应用程序中嵌入语言等)。

为了支持这一点,LLVM采用了非常复杂的内部表示(称为LLVM IR,创造性地足够),它基本上是用于理论硬件架构的汇编语言,旨在使用编译器非常容易地对其进行定位。大多数LLVM库采用IR,对其进行操作,并输出修改后的IR,支持项目的模块化目标。这与GCC相反,GCC(历史上我最近没有检查过)的IR不太完整,因此编译的各个阶段非常紧密,因为它们必须共享大量信息。

Clang是基于LLVM框架构建的旗舰编译器。