clang+llvm,clang -emit-llvm
LLVM和Clang-Linuxtoy简介
LLVM是一个低级虚拟机。
该库提供编译器相关支持,可以优化编程语言的编译时间、链接、在线编译和代码生成。总之可以作为多语言编译器的后台。如果这个比较抽象,那我们来介绍一下Clang: Clang是用C写的,基于LLVM,在LLVM BSD许可下发布。
C/C /Objective C/Objective C编译器,它的目标之一就是超越GCC。
Clang的发展是有原因的。维基如下:
使用苹果LLVM在不支持所有OpenGL特性的GPU(英特尔低端显卡)上生成代码(JIT),让程序仍然可以正常运行。之后LLVM和GCC的整合过程引起了一些不快。GCC系统庞大而笨重,而被Apple广泛使用的Objective-C在GCC中的优先级较低。另外,GCC作为一个纯编译系统,与IDE的配合并不好。另外,由于license的要求,苹果不能使用GCC的修改版,关闭源码。于是苹果决定从头开始写C家族的前端,那就是基于LLVM的Clang。
铿锵特色:
快:通过编译carbon.h的测试,carbon . h包含了OS X上几乎所有的C头文件,包括预处理、语法(lex)、解析、语义分析、抽象语法树生成,Clang比苹果GCC 4.0快2.5倍。(2007-7-25)内存占用小:Clang的内存占用是源代码的130%,而苹果GCC的是10x以上。诊断信息可读:我不会排版,推荐去网站看。其中语法错误不仅有源代码提示,错误调用和相关上下文下面还有~ ~ ~ ~和~的提示,相比GCC的提示。GCC兼容性。设计清晰简单,易于理解,易于扩展和增强。与拥有古老代码库的GCC相比,学习曲线较为平缓。基于库的模块化设计便于集成和重用。由于历史原因,GCC是单个可执行编译器,完成了从预处理到最终代码生成的全过程,中间的大量信息无法被其他程序重用。Clang将编译过程分为独立的阶段,AST信息可以序列化。在库的支持下,程序可以获得AST级别的信息,这将大大增强操纵代码的能力。对于IDE来说,代码补全和重构是很重要的功能。然而,如果没有底层的支持,仅仅使用标签分析或正则表达式匹配很难实现它们。当然,GCC也有它的优势:
支持JAVA/ADA/FORTRAN目前C对Clang的支持落后于GCC,参见
http://clang.llvm.org/cxx_status.html。(Clang最近已经可以自己编译了,见
http://www.phoronix.com/scan.php?Page=news_item px=Nzk2Mw)GCC支持更多平台GCC更受欢迎,使用更广泛,支持更全面。GCC基于C,不用C编译器也能编译。相信大家在这里都能对Clang和LLVM有所了解。除了Clang,LLVM
在Gallium3D中也用于JIT优化,Xorg中的pixman也考虑使用LLVM。
为了优化执行速度,llvm-lua使用llvm进行编译。
Lua代码,gpuocelot使用LLVM使CUDA程序运行在多核X86CPU、IBM Cell和支持OpenCL的设备上,无需重新编译。
个人感觉苹果在开源界名声不好(可能是我的错觉?),但是苹果也为开源社区贡献了很多,Webkit,OpenCL(虽然只是一个标准),Clang。最让我佩服的是,虽然我是命令行出身的Unix家族系统,但是我有勇气写出一个自带的图形栈,有着漂亮人性化的图形界面,可以说是为开源社区贡献了自己的精神和思想。
对于Clang这种潜力巨大的项目,希望其C支持(尤其是模板支持)能尽快完善。因为GCC在template出问题时的诊断信息就像小说一样。
{谢谢客人。}
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。