Bri*_*ell 193
LLVM最初代表"低级虚拟机",虽然它现在只是代表它自己,因为它已经发展成为传统虚拟机以外的东西.它是一组库和工具,以及标准化的中间表示,可用于帮助构建编译器和即时编译器.除了自己的中间表示之外,它无法编译任何其他内容; 它需要一个特定于语言的前端才能这样做.如果人们只是引用LLVM,它们可能只意味着低级库和工具.有些人可能会将Clang或llvm-gcc错误地称为"LLVM",这可能会引起一些混淆.
llvm-gcc是GCC的修改版本,它使用LLVM作为后端,而不是GCC自己的后端.它现在已被弃用,有利于DragonEgg,它使用GCC的新插件系统来做同样的事情而不需要GCC.
Clang是一个全新的C/C++/Objective-C编译器,它使用自己的前端,LLVM作为后端.它提供的优点是更好的错误消息,更快的编译时间,以及其他工具挂钩到编译过程的更简单方法(如LLDB调试器和Clang静态分析器).它也是相当模块化的,因此可以用作需要分析C,C++或Objective-C代码的其他软件的库.
这些方法中的每一种(普通GCC,GCC + LLVM和Clang)都有其优点和缺点.我见过的最后几组基准测试表明GCC在大多数测试用例中产生稍快的代码(虽然LLVM在少数几个方面略有优势),而LLVM和Clang的编译时间明显更好.GCC和GCC/LLVM组合的优势在于,已经测试了更多代码并且可以处理C的GCC风格; 有一些编译器特定的扩展只有GCC,有些地方标准允许实现变化但代码依赖于一个特定的实现.如果你获得大量的遗留C代码,它将在GCC中运行,而不是在Clang中运行,那么这种代码更有可能,尽管这种代码随着时间的推移而有所改善.
Mat*_* M. 49
这里有2件不同的东西.
LLVM是一个后端编译器,用于在其上构建编译器.它涉及适应目标体系结构的代码的优化和生成.
CLang是一个解析C,C++和Objective C代码并将其转换为适合LLVM的表示的前端.
llvm gcc是基于llvm的基于gcc 4.2的C++编译器的初始版本,现在不推荐使用它,因为CLang可以解析它可以解析的所有内容,等等.
最后,CLang和gcc之间的主要区别不在于生成的代码,而在于方法.虽然gcc是单片的,但CLang已经被构建为一套库.这种模块化设计为IDE或完成工具提供了很好的重用机会.
目前,gcc 4.6生成的代码通常要快一些,但CLang正在缩小差距.
llvm-gcc-4.2使用GCC前端来解析代码,然后使用LLVM生成编译输出.
"llvm编译器2.0"使用clang前端来解析代码,并使用LLVM生成编译输出."clang"实际上只是这个前端的名称,但它通常随便用作编译器的名称.
| 归档时间: |
|
| 查看次数: |
27849 次 |
| 最近记录: |