首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >LLVM与OS上的clang

LLVM与OS上的clang
EN

Stack Overflow用户
提问于 2011-04-19 04:38:25
回答 3查看 32.8K关注 0票数 145

我有一个关于OS上的llvm,clang和gcc的问题。

LLVM4.2,LLVM2.0和clang有什么不同?我知道它们都是基于llvm构建的,但是它们有什么不同呢?

除了编译速度更快之外,相比于gcc,llvm还有什么优势?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 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 debuggerClang static analyzer)连接到编译过程的更容易的方法。它也是合理模块化的,因此可以用作其他需要分析C、C++或Objective-C代码的软件的库。

这些方法(普通的GCC方法、GCC + LLVM方法和Clang方法)各有优缺点。我看到的最后几组基准测试表明,在大多数测试用例中,GCC的代码生成速度略快(尽管LLVM在一些测试用例中略有优势),而LLVM和Clang的编译时间要好得多。GCC和GCC/LLVM组合有一个优势,那就是更多的代码已经过测试,并在GCC风格的C上工作;有一些编译器特定的扩展,只有GCC才有,还有一些地方,标准允许实现变化,但代码依赖于一个特定的实现。如果你得到了大量的遗留C代码,那么它在GCC中运行的可能性比在Clang中运行的可能性要大得多,尽管随着时间的推移,这一点正在改进。

票数 222
EN

Stack Overflow用户

发布于 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正在缩小差距。

票数 64
EN

Stack Overflow用户

发布于 2011-04-19 04:48:18

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

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

票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5708610

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档