编译速度更快、编译产出更小、出错提示更友好。尤其是在比较极端的情况下。

两年多前曾经写过一个Scheme解释器,词法分析和语法解析部分大约2000行,用的是Boost.Spirit——一个重度依赖C++模版元编程的框架。当时用g++ 4.2编译的情况是:

  1. 编译速度极慢:完整编译一次需要20分钟

  2. 编译过程中内存消耗极大:单个g++实例内存峰值消耗超过1G

  3. 中间产出物极大:编译出的所有.o文件加在一起大约1~2G,debug链接产物超过200M

  4. 编译错误极其难以理解:编译错误经常长达几十K,基本不可读,最要命的是编译错误经常会长到被g++截断,看不到真正出错的位置,基本上只能靠裸看代码来调试
这里先不论我使用Spirit的方式是不是有问题,或者Spirit框架自身的问题。我当时因为实在忍受不了g++,转而尝试clang。当时用的是clang 2.8,刚刚可以完整编译Boost,效果让我很满意:
  1. 编译速度有显著提升,记得大约是g++的1/3或1/4

  2. 编译过程中的内存消耗差别好像不大

  3. 中间产出物及最终链接产物,记得也是g++的1/3或1/4

  4. 相较于g++,编译错误可读性有所飞跃,至少不会出现编译错误过长被截断的问题了
当时最大的缺点是clang编译出的可执行文件无法用gdb调试,需要用调试器的时候还得用g++再编译一遍。不过这个问题后来解决了,我不知道是clang支持了gdb还是gdb支持了clang。至少我当前在Ubuntu下用clang 3.0编译出的二进制文件已经可以顺利用gdb调试了。

最后一点,其他同学也有讲到,就是Clang采用的是BSD协议。这是苹果资助LLVM、FreeBSD淘汰GCC换用Clang的一个重要原因。

最新文章

  1. redis非特定类型命令
  2. android 照片地理位置 demo
  3. Nginx去除版本号
  4. Caused by: java.lang.UnsatisfiedLinkError...解决经历
  5. stl学习(一)优先队列
  6. 在RedHat.Enterprise.Linux_v6.3系统中安装Oracle_11gR2教程
  7. (转载)Java基础知识总结
  8. Java Inner class && nested class
  9. 联想电脑win7旗舰版环境下的如何成功配置AppServ
  10. labview在线帮助网址
  11. 【LeetCode 209】Minimum Size Subarray Sum
  12. c#编程:输入、输出
  13. Git和Github使用
  14. Centos7上安装单机版redis
  15. 自学python之路(day1)
  16. [转]python中的正则表达式(re模块)
  17. P2153 [SDOI2009]晨跑
  18. 如何创建并运行java线程 , 多线程使用
  19. RxJS之工具操作符 ( Angular环境 )
  20. 并发写Btree原理剖析

热门文章

  1. 批量删除QQ空间说说
  2. 在项目引用里添加上对Microsoft Word 11.0 object library的引用
  3. Python 连接Sql Server数据库 MSSql
  4. GET和POST区别(转)
  5. 【起航计划 029】2015 起航计划 Android APIDemo的魔鬼步伐 28 App->Preferences->Default Values 偏好默认值
  6. 【起航计划 004】2015 起航计划 Android APIDemo的魔鬼步伐 03 App->Activity->Animation Activity跳转动画 R.anim.×× overridePendingTransition ActivityOptions类
  7. CentOS7.3下关于DHCP中继代理服务器的详细配置
  8. 笨办法学Python(十一)
  9. vuejs样式绑定
  10. python 3+djanjo 2.0.7简单学习(二)--创建数据库和模型