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

Eth*_*gue 4 c compilation llvm

最近几个月,我一直在看到提到"LLVM".我查了一下,但对"现代编译器基础设施"的描述并没有真正告诉我什么.除了一些随附的ac编译器之外,我找不到太多关于它的东西(它似乎与其他任何C编译器没有任何不同.)

这个LLVM事物和任何其他编译器(例如GCC)之间是否存在一些差异?或者它是一个过度炒作的替代品,受益于比竞争对手更新?

小智 20

关于这个问题,有一些学术文献,我推荐由主要作者(Chris Lattner)撰写的AOSA书籍章节.

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

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

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

  • clang源代码(没有看过LLVM)也比GCC源代码更容易理解,因此对于学习和尝试编译器非常有用。可能部分由于所述模块化。 (3认同)