为什么clang不再使用?

Dan*_*age 40 c c++ compiler-construction clang

我以前在C/C++中做过相当多的编程,但是现在它只占我编程的一小部分(脚本语言更适合我做的很多工作).过去几天我参与了一些C编程项目,并且惊讶于我忘记了多少很少的语法细节.更糟糕的是cc/ gcc通常有关于这些问题的含糊不清或无信息的错误消息(抱歉,我不记得任何具体的例子).

clang不久前就学会了编译器,并决定尝试一下.错误消息更清晰,帮助我识别和修复语法中的问题.我的问题是为什么不使用/提及这个工具比它更多?它是否与通常的嫌疑人(cc/ gcc)相比是如此新颖,还是它不支持他们支持的功能,或者它是否更难获得?我很难相信最后一个,因为它在我的iMac上安装了dev工具,并且需要sudo apt-get install clang在我的Ubuntu盒子上安装一个命令().

nos*_*nos 40

我的问题是为什么不使用/提及这个工具比它更多?

这可能是因为历史,以及我们人类通常如何表现.

传统上,gcc是唯一可以实际用于在至少所有免费*nix克隆上编译C程序的真实(免费)编译器.它实际上是Linux的所有基本系统和内核,*BSD,现在可能是OSX,以及其他编译器.

虽然存在缺陷,但基本上这意味着:gcc可行.如果没有损坏,请不要修理它.除此之外,你现在拥有庞大的用户群,很容易获得gcc的帮助,有很多人使用gcc,正在研究gcc本身等.

一般来说,如果你想把一个庞大的社区从他们习惯的东西转换成其他东西,那么"其他东西"必须"明显"更好.只是"更好"通常不够理智.我想你可以找到在社会的许多领域都有这方面的例子.

clang是更新的,有些人只会怀疑它是否适合任务,是否有错误,如果它产生较慢的代码等等 - 似乎在人性中是可疑的 - 新事物是可怕的.许多人甚至不知道铿锵声,许多人不在乎,因为他们对gcc很满意.

虽然,如果 更愿意使用clang,那就去吧 - 错误消息确实"更好",而且比gcc更容易理解.


grr*_*sel 10

铿锵前端相对较新.例如,2010年10月的2.8版本标志着C++ 98/03支持的完成.

似乎随着成熟度的增加,将会有越来越多的采用.例如,正在进行使用clang构建FreeBSD OS(以及其他BSD OS)的工作,从而消除了对GCC/G ++的依赖.

Apple正在推动LLVM/clang组合.他们似乎不再支持他们旧的GCC工具链分支(基于4.2),并且完全依赖于用于OSX/iOS开发的clang工具.

Clang也越来越多地采用类似C语言的自定义编译器(例如OpenCL的着色器语言编译器)


Mar*_*tos 7

LLVM已经存在了一段时间,但是 - 至少在我的脖子上 - 它最近才刚刚起步,可能是因为苹果公司一直在大力推动用他们自己的工具替换克朗的gcc -链.

此外,我相信它的C++支持最近才成为生产级别.编辑:似乎还没有.(见下面的评论.)

另一个因素可能是LLVM主要由单一供应商提供支持,非Apple开发人员对此有着天生的不信任.

  • +1,我会为最后一句话添加第二个!*由单一供应商支持,非Apple开发人员对其有一种与生俱来的不信任.* (5认同)
  • 它不是生产级的,只是功能完整(C++ 03).例如它无法正确编译Qt AFAIK(它确实编译但单元测试显示回归). (3认同)

Fre*_*urk 6

我的问题是为什么不使用/提及这个工具比它更多?与通常的嫌疑人相比,它是否是如此新颖......

这正是原因所在.它仍然是新的,核心功能仍在积极开发中.请记住,现有项目可能正在使用特定于编译器的功能 - 或使用具有这些功能的库 - 并且开发人员无论如何都不愿意为可能存在意外错误或未知性能/大小/等的实验性工具更改工作工具.权衡,即使新工具每天都在变得越来越好.