LLVM是典型的虚拟机吗?

时间:2012-11-01 15:55:06

标签: c++ llvm

我想知道LLVM是典型的虚拟机,如Java或.Net,还是仅仅是运行时环境,就像oridinary C ++运行时一样?

1 个答案:

答案 0 :(得分:5)

这些都不是。

LLVM曾经代表“低级虚拟机”,但从未意味着Java或.NET意义上的完整虚拟机,“LLVM”已经不再是缩写。

LLVM的核心部分是LLVM IR。

IR代表内部表示,它是编译器中使用的术语,指的是在前端和后端之间使用的程序表示。 IR允许解析语言的细节与代码生成的细节分离。在传统的编译器设计中,理想情况下,前端和后端组件可以自由混合,这样N个前端和M个后端就可以创建NxM编译器。

LLVM的IR与传统的内部表示不同; LLVM IR是一种汇编语言,或类似于Java和.NET的字节代码,而不是基于抽象语法树。这就是“虚拟机”的用武之地。但是,LLVM IR并不强制执行高级语义,例如.NET和JVM等数组边界检查。此外,LLVM IR可以进行JIT编译,但通常将其静态编译为本机代码,就像任何传统编译器的后端对IR一样。


LLVM已经发展成为围绕核心编译器基础架构的许多组件的总体项目。最初LLVM是用于操作它的IR和工具(优化,代码生成),但已经发展到包含更多内容,包括一些针对LLVM IR的前端,用于解析和生成程序集的机器代码框架,通用对象文件处理,调试器,链接器......

如果您有兴趣,每年都会举行LLVM会议,讨论LLVM和使用LLVM的项目的情况,并记录和发布演示文稿:http://llvm.org/devmtg/。今年将在下周举行。