我有一个关于OS上的llvm,clang和gcc的问题。
LLVM4.2,LLVM2.0和clang有什么不同?我知道它们都是基于llvm构建的,但是它们有什么不同呢?
除了编译速度更快之外,相比于gcc,llvm还有什么优势?
发布于 2011-04-19 04:49:04
LLVM最初代表“低级虚拟机”,尽管它现在只是代表自己,因为它已经成长为不同于传统虚拟机的东西。它是一组库和工具,以及标准化的中间表示,可用于帮助构建编译器和即时编译器。除了它自己的中间表示之外,它不能编译任何东西;它需要一个特定于语言的前端才能做到这一点。如果人们只是提到LLVM,他们可能只指低级的库和工具。有些人可能会将Clang或LLVM- or错误地称为"LLVM",这可能会造成一些混淆。
llvm-gcc是GCC的改进版,它使用LLVM作为后端,而不是GCC自己的后端。它现在被弃用了,取而代之的是DragonEgg,它使用GCC的新插件系统来做同样的事情,而不需要派生GCC。
Clang是一个全新的C/C++/Objective-C编译器,它使用自己的前端,LLVM作为后端。它提供的优势是更好的错误消息,更快的编译时间,以及其他工具(如LLDB debugger和Clang static analyzer)连接到编译过程的更容易的方法。它也是合理模块化的,因此可以用作其他需要分析C、C++或Objective-C代码的软件的库。
这些方法(普通的GCC方法、GCC + LLVM方法和Clang方法)各有优缺点。我看到的最后几组基准测试表明,在大多数测试用例中,GCC的代码生成速度略快(尽管LLVM在一些测试用例中略有优势),而LLVM和Clang的编译时间要好得多。GCC和GCC/LLVM组合有一个优势,那就是更多的代码已经过测试,并在GCC风格的C上工作;有一些编译器特定的扩展,只有GCC才有,还有一些地方,标准允许实现变化,但代码依赖于一个特定的实现。如果你得到了大量的遗留C代码,那么它在GCC中运行的可能性比在Clang中运行的可能性要大得多,尽管随着时间的推移,这一点正在改进。
发布于 2011-04-19 04:48:39
这里有两个不同的东西。
LLVM是一个后端编译器,用于在其上构建编译器。它处理与目标架构相适应的代码的优化和生成。
CLang是一个前端,它解析C、C++和Objective C代码,并将其转换为适合于LLVM的表示形式。
llvm gcc是基于llvm的基于gcc 4.2的C++编译器的初始版本,现在已经被弃用,因为CLang可以解析它可以解析的任何东西,等等。
最后,CLang和gcc之间的主要区别不在于生成的代码,而在于方法。虽然gcc是一个整体,但CLang已经被构建为一套库。例如,这种模块化设计为IDE或完成工具提供了很好的重用机会。
目前,由gcc 4.6生成的代码通常要快一点,但CLang正在缩小差距。
发布于 2011-04-19 04:48:18
llvm- GCC -4.2使用GCC前端解析您的代码,然后使用LLVM生成编译后的输出。
"llvm编译器2.0“使用clang前端解析您的代码,并使用LLVM生成编译后的输出。"clang“实际上只是这个前端的名称,但它经常被随意用作整个编译器的名称。
https://stackoverflow.com/questions/5708610
复制相似问题