Clang是一个C++编写、基于LLVM、发布于LLVMBSD许可证下的C/C++/ObjectiveC/ObjectiveC++编译器,其目标(之一)就是超越GCC。
Clang开发事出有因,Wiki介绍如下:
Apple使用LLVM在不支持全部OpenGL特性的GPU(Intel低端显卡)上生成代码(JIT),令程序仍然能够正常运行。之后LLVM与GCC的集成过程引发了一些不快,GCC系统庞大而笨重,而Apple大量使用的Objective-C在GCC中优先级很低。此外GCC作为一个纯粹的编译系统,与IDE配合很差。加之许可证方面的要求,Apple无法使用修改版的GCC而闭源。于是Apple决定从零开始写Cfamily的前端,也就是基于LLVM的Clang了。
Clang的特性:
快:通过编译OSX上几乎包含了所有C头文件的carbon.h的测试,包括预处理(Preprocess),语法(lex),解析(parse),语义分析(SemanticAnalysis),抽象语法树生成(AbstractSyntaxTree)的时间,Clang是AppleGCC4.0的2.5x快。(2007-7-25)内存占用小:Clang内存占用是源码的130%,AppleGCC则超过10x。诊断信息可读性强:我不会排版,推荐去网站观看。其中错误的语法不但有源码提示,还会在错误的调用和相关上下文的下方有~~~~~和^的提示,相比之下GCC的提示很天书。GCC兼容性。设计清晰简单,容易理解,易于扩展增强。与代码基础古老的GCC相比,学习曲线平缓。基于库的模块化设计,易于IDE集成及其他用途的重用。由于历史原因,GCC是一个单一的可执行程序编译器,其内部完成了从预处理到最后代码生成的全部过程,中间诸多信息都无法被其他程序重用。Clang将编译过程分成彼此分离的几个阶段,AST信息可序列化。通过库的支持,程序能够获取到AST级别的信息,将大大增强对于代码的操控能力。对于IDE而言,代码补全、重构是重要的功能,然而如果没有底层的支持,只使用tags分析或是正则表达式匹配是很难达成的。
评论