+ -
当前位置:首页 → 问答吧 → 推荐尝试Clang编译器

推荐尝试Clang编译器

时间:2011-09-09

来源:互联网

Clang是一个 C、C++ 和 Objective-C 编程语言的编译器前端。它采用了底层虚拟机(LLVM)作为其后端。它的目标是提供一个GNU编译器套装(GCC)的替代品。由苹果公司开发,而源代码授权是使用类 BSD 的开源授权。

LLVM 是 Low Level Virtual Machine 的简称,这个库提供了与编译器相关的支持,能够进行程序语言的编译期优化、链接优化、在线编译优化、代码生成。简而言之,可以作为多种语言编译器的后台来使用。如果这样还比较抽象的话,介绍下 Clang 就知道了:Clang 是一个 C++ 编写、基于 LLVM、发布于 LLVM BSD 许可证下的 C/C++/Objective C/Objective C++ 编译器,其目标(之一)就是超越 GCC。

Clang 的特性:
快:通过编译 OS X 上几乎包含了所有 C 头文件的 carbon.h 的测试,包括预处理 (Preprocess),语法 (lex),解析 (parse),语义分析 (Semantic Analysis),抽象语法树生成 (Abstract Syntax Tree) 的时间,Clang 是 Apple GCC 4.0 的 2.5x 倍快。

内存占用小:Clang 内存占用是源码的 130%,Apple GCC 则超过 10x。

诊断信息可读性强:我不会排版,推荐去网站观看。其中错误的语法不但有源码提示,还会在错误的调用和相关上下文的下方有~~~~~和^的提示,相比之下 GCC 的提示很天书。

GCC 兼容性。

设计清晰简单,容易理解,易于扩展增强。与代码基础古老的 GCC 相比,学习曲线平缓。

基于库的模块化设计,易于 IDE 集成及其他用途的重用。由于历史原因,GCC 是一个单一的可执行程序编译器,其内部完成了从预处理到最后代码生成的全部过程,中间诸多信息都无法被其他程序重用。Clang 将编译过程分成彼此分离的几个阶段,AST 信息可序列化。通过库的支持,程序能够获取到 AST 级别的信息,将大大增强对于代码的操控能力。对于 IDE 而言,代码补全、重构是重要的功能,然而如果没有底层的支持,只使用 tags 分析或是正则表达式匹配是很难达成的。

听说FreeBSD 9就要彻底用Clang取代gcc,真是可喜可贺呀。目前我也已经把Gentoo下面的默认编译器替换成了Clang。

有兴趣的可以来试试,在CU上面用的人貌似还不少。

作者: woodelf   发布时间: 2011-09-09

哎,谁把LLVM翻译成底层虚拟机的。英文缩写就够让人误解的了,中文更让人误解。LLVM首页上第一段就写跟虚拟机没有关系,虽然能用来写虚拟机。

在学术界都用clang。企业嘛,还好使就不换。写得顾左右而言他。clang相比最大的优势还是在于其内部的结构、数据结构之类的。从用途来讲,gcc还是优于clang的。文中数据有些夸张。要想彻底替代gcc还有很长的路要走。总之,拿来研究,用clang。要拿来用,还是得gcc。

作者: jiang925   发布时间: 2011-09-09

哎,谁把LLVM翻译成底层虚拟机的。英文缩写就够让人误解的了,中文更让人误解。LLVM首页上第一段就写跟虚拟 ...
jiang925 发表于 2011-9-9 07:46

不甚同意,要知道,BSD用户还是很期待clang能够在底层取代gcc的。其一是他们不喜欢GNU,我也不喜欢。其二是BSD所用的gcc版本普遍老旧,最新的也就才gcc-4.2。

作者: woodelf   发布时间: 2011-09-09

回复 woodelf


怎么说好呢。不知道你在写linux软件的企业里呆过没。一腔热血追新技术是混不下去的。
http://clang.llvm.org/comparison.html
看一看官网里跟gcc的对比。有多少条clang的优点是针对最终用户的。只有编译速度快,和占用空间小。占用空间在现在完全不用考虑。编译速度快还算个优点,但是再看。
http://en.wikipedia.org/wiki/Cla ... d_GCC_compatibility引用的http://www.phoronix.com/scan.php ... lvm_clang&num=6
clang的运行时速度比gcc要慢。
另外,llvm系列有没有调试器?难道还要用gdb?

我还是那句话,学术用clang。企业还是用gcc的好。

作者: jiang925   发布时间: 2011-09-09