c++ - LLVM 是典型的虚拟机吗?

标签 c++ llvm

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

最佳答案

两者都不是。

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 编译,但通常它会静态编译为 native 代码,就像任何传统编译器的后端对 IR 所做的那样。


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

如果您感兴趣,每年都会举行一次 LLVM session ,讨论 LLVM 中发生的事情以及使用 LLVM 的项目,他们会记录并发布演示文稿:http://llvm.org/devmtg/ .今年的比赛将于下周举行。

关于c++ - LLVM 是典型的虚拟机吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13180767/

相关文章:

c++ - CppUnit 如何实现异常测试

c++ -std=c++11 -stdlib=libc++ 在 osx lion 上给出错误

clang - 如何从 LLVM 指令获取文件名和目录?

c++ - 为什么循环中耗时与迭代次数不成正比

c++ - 在 C++ 中定义运算符 **

c++ - 为模板类重载友元运算符 <<

testing - 编译器代码生成器验证

cuda - 内核参数数据存放在哪里?

compiler-construction - def-use 指令链

C++ - 部分特化模板类成员函数