推荐尝试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上面用的人貌似还不少。
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。
在学术界都用clang。企业嘛,还好使就不换。写得顾左右而言他。clang相比最大的优势还是在于其内部的结构、数据结构之类的。从用途来讲,gcc还是优于clang的。文中数据有些夸张。要想彻底替代gcc还有很长的路要走。总之,拿来研究,用clang。要拿来用,还是得gcc。
作者: jiang925 发布时间: 2011-09-09
哎,谁把LLVM翻译成底层虚拟机的。英文缩写就够让人误解的了,中文更让人误解。LLVM首页上第一段就写跟虚拟 ...
jiang925 发表于 2011-9-9 07:46
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的好。
怎么说好呢。不知道你在写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
相关阅读 更多
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28