2011-04-18 57 views
113

铛我有一个关于在OS XLLVM VS在OS X

是什么LLVM-GCC 4.2,LLVM 2.0和铿锵的区别LLVM,铛,和gcc一个问题吗?我知道他们都基于llvm,但它们有什么不同?

除了更快的编译,llvm优于gcc的优势是什么?

+8

llvm只是一个后端,不能有一个独立的llvm编译器...只有不同的前端,像gcc和clang。 – smerlin 2011-04-18 20:46:48

+3

@smerlin:“llvm compiler”是Apple的clang + llvm的商标名称:http://developer.apple.com/technologies/tools/whats-new.html#llvm-compiler – 2011-04-18 20:50:15

+0

其他详细信息在这里:http:// stackoverflow .com/a/26724886/1938163 – 2014-11-10 13:18:14

回答

168

LLVM最初代表着“低级虚拟机”,尽管它现在只是代表自己,因为它已经成长为传统虚拟机以外的东西。它是一套库和工具,以及一个标准化的中间表示形式,可用于帮助构建编译器和实时编译器。除了自己的中间表示以外,它不能编译任何东西;它需要一个语言特定的前端才能这样做。如果人们只提到LLVM,他们可能只是低级库和工具。有些人可能会错误地将Clang或llvm-gcc称为“LLVM”,这可能会导致一些混淆。

llvm-gcc是GCC的修改版本,它使用LLVM作为其后端而不是GCC自己的后端。现在已经弃用了,赞成DragonEgg,它使用GCC的新插件系统在不分叉GCC的情况下做同样的事情。

Clang是一个全新的C/C++/Objective-C编译器,它使用自己的前端和LLVM作为后端。它提供的优点是更好的错误消息,更快的编译时间,以及让其他工具能够与编译过程挂钩的更简单方法(如LLDB debuggerClang static analyzer)。它也是合理的模块化,因此可以用作需要分析C,C++或Objective-C代码的其他软件的库。

这些方法(普通GCC,GCC + LLVM和Clang)各有其优点和缺点。我见过的最后几套基准测试显示GCC在大多数测试用例中生成稍快的代码(虽然LLVM在少数几个方面略有优势),而LLVM和Clang的编译时间明显更快。GCC和GCC/LLVM组合的优点是,更多的代码已经过测试,并且适用于C的GCC风格;有一些只有GCC的编译器特定的扩展,有些地方的标准允许实现变化,但代码依赖于一个特定的实现。如果您获得大量的遗留C代码,它将在GCC中工作的可能性要比在Clang中工作的可能性要大得多,不过随着时间的推移这种情况会有所改善。

+4

感谢您的解释:) – flumpb 2011-09-21 17:02:59

+8

要添加到这个美妙的答案:clang也是一组库(称为libclang),您可以使用代码分析,自动完成,语法突出等的东西...这对于IDE来说非常方便。 – 2011-11-09 09:43:18

+3

在为MacOS X或iOS构建应用程序时,请考虑Clang是Apple用来构建包括操作系统在内的所有MacOS X和iOS软件的软件,而Clang是您自动获得的,毫不费力的,以及您想要的每个人曾经要求帮助正在使用。苹果从来不支持gcc过去的gcc 4.2,并且不再发布任何版本的gcc。 – gnasher729 2014-02-23 21:00:09

5

llvm-gcc-4.2使用GCC前端解析代码,然后使用LLVM生成编译输出。

“llvm编译器2.0”使用clang前端解析代码,并使用LLVM生成编译后的输出。 “clang”实际上只是这个前端的名称,但它经常作为整个编译器的名字随便使用。

43

这里有两个不同的东西。

LLVM是一个后端编译器,意图在其上构建编译器。它处理适应目标体系结构的代码的优化和生成。

CLang是解析C,C++和Objective C代码并将其转换为适合于LLVM的表示形式的前端。

llvm gcc是基于gcc 4.2的基于llvm的C++编译器的初始版本,由于CLang可以解析它可以解析的所有内容,所以现在不推荐使用它,等等。

最后,CLang和gcc之间的主要区别并不在于生成的代码,而是在方法中。尽管gcc是单片的,但CLang已经被构建为一套库。这种模块化设计为例如IDE或完成工具提供了很好的重用机会。

目前,gcc 4.6生成的代码通常要快一些,但是CLang正在缩小差距。