c++ - OS X 上的 LLVM 与 clang

标签 c++ c gcc llvm clang

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

llvm-gcc 4.2、llvm 2.0和clang有什么区别?我知道它们都建立在 llvm 上,但它们有什么不同?

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

最佳答案

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

llvm-gcc 是 GCC 的修改版本,它使用 LLVM 作为其后端,而不是 GCC 自己的。现在它已被弃用,取而代之的是 DragonEgg,它使用 GCC 的新插件系统来做同样的事情,而无需 fork 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 中运行的可能性要大得多,尽管随着时间的推移这种情况正在改善。

关于c++ - OS X 上的 LLVM 与 clang,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5708610/

相关文章:

C++:方法重复;需要 DRY 优化

c - 使用 fscanf 读取两行整数

c - 如何在 C 中索引一个(不是所有的 ascii)utf8 字符串?

c++ - C/C++ 未使用的内联函数 undefined reference

c - C 中有效的 printf() 语句

c++ - boost.units 中单位的转换因子

c++ - 在 C++11 中从 std::deque move 一个元素

c++ - 从对象数组中选择一个随机对象

用于定义带有回调的测试方法的 C 宏

c - 了解 token 粘贴