GCC vs clang / LLVM —各自的优缺点


20

GCC与clang / LLVM的优缺点是什么?


3
对谁有利/弊?LLVM显然是编译器后端的优势,除非您需要大量受支持的体系结构。但是我认为您是在谈论最终用户。

Answers:


19

gcc非常成熟,易于安装(至少对于大多数系统而言),并且是许多系统的默认编译器,因此在许多情况下,人们几乎没有意识到安装它的意愿。它已被移植到无数的架构中,因此如果您必须针对晦涩的硬件,它很有可能开箱即用。

clang较新。它通常会产生更好的错误消息,尤其是对于C ++模板。在许多情况下,它的运行速度要快得多。它主要是作为一组库构建的,因此还有很多其他项目(例如,代码分析器)使用相同的前端,理解相同的输入等。使用llvm作为其后端为它提供了更多的灵活性。如何从中生成代码。


17
  1. Clang有更好的错误报告。例如,如果您在调用的函数名称中输入错字,Clang会报告这很可能是错字(并提供正确的名称),而GCC会抱怨未知的函数名。

  2. 如果您针对x86 / x86-64,GCC通常会产生更快的代码。对于ARM,情况是模棱两可的,通常Clang会更好地进行优化。另外,AFAIK Clang不支持代码大小优化。

  3. GCC使用了很多启发式方法。这对于提高性能(在典型情况下)很有好处,但是如果您要进行一些源代码级的优化(例如,循环展开),则太糟糕了。即使很小的源代码更改也可以使GCC生成完全不同的输出。Clang更可预测,通常它会生成您期望的代码。

  4. 与Jerry Coffin不同,我发现从源代码构建GCC比Clang困难得多。Clang入门页面中的过程始终对我有用类似的GCC手册在第一次尝试中从未奏效。GCC依赖于特定版本的GMP,MPFR,MPC,Parma Polyhedra库和CLooG,因此我需要进行几次迭代才能找到适用于特定GCC版本的版本(是的,使用这些库的最新版本不起作用)。

  5. 我觉得Clang比GCC受到更好的测试。即使我只使用GCC的正式版本,它有时也会产生错误的代码。对于Clang,我通常使用主干版本(再次,因为它易于构建),但是我从未见过它生成错误的输出。

  6. GCC在Linux世界中几乎是标准的,并且添加了许多非标准功能,这些功能在Linux软件中得到了广泛使用。Clang试图与GCC兼容,但是有时它只是悄悄地忽略了它们。最重要的是,Clang不支持OpenMP。但是,它也具有GCC不支持的扩展名,但可能是有用的(例如,随身携带的内在函数__buildin_addc)。

  7. 如果您想进行编译器研究,或者只是想知道它的工作方式,您会发现Clang / LLVM源代码更易于访问。Clang / LLVM代码是人类可读的,而不仅仅是编译器可读的。

  8. (适用AINAL免责声明)Clang / LLVM许可证使您可以更自由地使用代码,例如在商业或封闭源代码产品中使用。当Clang编译器运行时(compiler-rt库)在许可的MIT许可下时,GCC运行时库的许可证增加了另一层限制。

简介:在开发程序时,请使用Clang进行编译,并在最终构建时使用GCC进行编译(但请确保其运行速度更快且不会中断)。如果进行编译器研究,请坚持使用Clang / LLVM。


有趣的是,我从不知道Clang具有随身携带的内在函数。但这应该__builtin_add不是__buildin_addc。无论如何,当Clang addc遇到一个使用比较作为进位的
加法

我的意思__builtin_addc不是__buildin_addc
phuclv

此处的性能比较已过时。根据最近的基准测试,铛是不是x86 / 64 GCC略微超过一半的测试(如更快openbenchmarking.org/result/1605071-HA-GCCCLANG568
朱尔斯

3

如果您有新的CPU体系结构或新的优化,并且想在GPL下开源它们,则可以将它们贡献给gcc。但是,gcc的模块化程度较低,因此可能需要更多工作来添加一个人的修改/添加项。如果您想为开源项目贡献新的体系结构或优化,但是要获得非GPL许可,则可以将它们贡献给LLVM / clang。有些公司的法律部门只允许后者。


-3

今天(2011年8月11日),GCC支持的C ++ 0x功能比Clang多得多。如果您想要这些功能,那就很容易了。GCC是您的选择。


根据我的研究,该答案在指定的时间范围内是准确且有用的。

8
但这并不是一个很好的答案,因为从今天开始(2012年7月28日),这一点不再有效。Clang比GCC支持更多(如果有的话)。
DeadMG
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.