什么是 LLVM,为什么突然间如此流行?
What is LLVM and why is it so popular all of a sudden?
最近几个月,我到处都看到提到 "LLVM"。我已经查过了,但是 "modern compiler infrastructure" 的描述并没有真正告诉我任何信息。我找不到太多关于它的信息,除了提到它附带的一个 c 编译器(它似乎与那里的任何其他 C 编译器没有什么不同。)
这个 LLVM 东西和任何其他编译器(比如 GCC)之间有什么区别吗?还是由于比竞争对手更新而被过度炒作的替代品?
有一些关于这个问题的学术文献,I recommend the AOSA book chapter on it,由主要作者 (Chris Lattner) 撰写。
LLVM 是为支持编译器开发和相关任务而构建的库的集合。每个库都支持典型编译器管道中的特定组件(词法分析、解析、特定类型的优化、特定体系结构的机器代码生成等)。它如此受欢迎的原因在于其模块化设计使其功能可以非常轻松地进行调整和重用。当您为现有语言开发编译器以针对新的硬件架构时,这很方便(您只需编写硬件特定组件,所有的词法分析、解析、机器独立优化等都为您处理),或者为一种新语言开发一个编译器(所有后端的东西都为你处理),或者当你在做一些与编译器相邻的事情时(比如分析源代码,在更大的应用程序中嵌入一种语言等)。
为了支持这一点,LLVM 采用了一种非常复杂的内部表示(称为 LLVM IR,足够有创意),它基本上是用于理论硬件架构的汇编语言,旨在使编译器对其进行定位非常容易。大多数 LLVM 库都接收 IR,对其进行操作,并输出修改后的 IR,支持项目的模块化目标。这与 GCC 形成对比,GCC(历史上,我最近没有检查过)具有不太完整的 IR,因此编译的各个阶段非常紧密地耦合,因为它们必须共享大量信息。
Clang 是基于 LLVM 框架构建的旗舰编译器。
最近几个月,我到处都看到提到 "LLVM"。我已经查过了,但是 "modern compiler infrastructure" 的描述并没有真正告诉我任何信息。我找不到太多关于它的信息,除了提到它附带的一个 c 编译器(它似乎与那里的任何其他 C 编译器没有什么不同。)
这个 LLVM 东西和任何其他编译器(比如 GCC)之间有什么区别吗?还是由于比竞争对手更新而被过度炒作的替代品?
有一些关于这个问题的学术文献,I recommend the AOSA book chapter on it,由主要作者 (Chris Lattner) 撰写。
LLVM 是为支持编译器开发和相关任务而构建的库的集合。每个库都支持典型编译器管道中的特定组件(词法分析、解析、特定类型的优化、特定体系结构的机器代码生成等)。它如此受欢迎的原因在于其模块化设计使其功能可以非常轻松地进行调整和重用。当您为现有语言开发编译器以针对新的硬件架构时,这很方便(您只需编写硬件特定组件,所有的词法分析、解析、机器独立优化等都为您处理),或者为一种新语言开发一个编译器(所有后端的东西都为你处理),或者当你在做一些与编译器相邻的事情时(比如分析源代码,在更大的应用程序中嵌入一种语言等)。
为了支持这一点,LLVM 采用了一种非常复杂的内部表示(称为 LLVM IR,足够有创意),它基本上是用于理论硬件架构的汇编语言,旨在使编译器对其进行定位非常容易。大多数 LLVM 库都接收 IR,对其进行操作,并输出修改后的 IR,支持项目的模块化目标。这与 GCC 形成对比,GCC(历史上,我最近没有检查过)具有不太完整的 IR,因此编译的各个阶段非常紧密地耦合,因为它们必须共享大量信息。
Clang 是基于 LLVM 框架构建的旗舰编译器。