晚上听国软徐纪元学弟给我说起了他刚装上的 Mac Lion 操作系统,也说到了最近 Apple 推出的新版本的 Xcode 4.2 在 iOS 4、iOS 5 程序开发中,加入了 automatic reference counting 功能,也即是开发者不再需要手动的做内存管理了,不用纠结内存管理了,不再需要 retain release 了。 同时 Apple 现在把编译器改为 LLVM 了,同时也保留了 GCC 的支持,但按这样的发展,GCC 至少在 Apple 开发上快到尽头了。

在网上查了下 LLVM 的发展历史:

发展历程

2000年 LLVM 开始开发,

2005年 Apple 雇了 Chris Lattner,LLVM 也相当于成了 Apple 的官方支持的编译器。

  Apple 已经将它用在 OpenGL 的流水线优化,Xcode 已经能使用 llvm-gcc 编译代码。

到今天的 Xcode 已经开始使用 llvm 编译代码。

鉴于此,也是自己对 LLVM 的学习,转载了这篇文章,让自己也让你明白 LLVM 的皮毛。

同时推荐 LLVM 的官方链接:http://llvm.org/。

链接:http://linuxtoy.org/archives/llvm-and-clang.html。

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

Clang 开发事出有因,Wiki 介绍如下:

Apple 使用 LLVM 在不支持全部 OpenGL 特性的 GPU (Intel 低端显卡) 上生成代码 (JIT),令程序仍然能够正常运行。之后 LLVM 与 GCC 的集成过程引发了一些不快,GCC 系统庞大而笨重,而 Apple 大量使用的 Objective-C 在 GCC 中优先级很低。此外 GCC 作为一个纯粹的编译系统,与 IDE 配合很差。加之许可证方面的要求,Apple 无法使用修改版的 GCC 而闭源。于是 Apple 决定从零开始写 C family 的前端,也就是基于 LLVM 的 Clang 了。

Clang 的特性:

  1. 快:通过编译 OS X 上几乎包含了所有 C 头文件的 carbon.h 的测试,包括预处理 (Preprocess),语法 (lex),解析 (parse),语义分析 (Semantic Analysis),抽象语法树生成 (Abstract Syntax Tree) 的时间,Clang 是 Apple GCC 4.0 的 2.5x 快。(2007-7-25)
  2. 内存占用小:Clang 内存占用是源码的 130%,Apple GCC 则超过 10x。
  3. 诊断信息可读性强:我不会排版,推荐去网站观看。其中错误的语法不但有源码提示,还会在错误的调用和相关上下文的下方有~~~~~和^的提示,相比之下 GCC 的提示很天书。
  4. GCC 兼容性。
  5. 设计清晰简单,容易理解,易于扩展增强。与代码基础古老的 GCC 相比,学习曲线平缓。
  6. 基于库的模块化设计,易于 IDE 集成及其他用途的重用。由于历史原因,GCC 是一个单一的可执行程序编译器,其内部完成了从预处理到最后代码生成的全部过程,中间诸多信息都无法被其他程序重用。Clang 将编译过程分成彼此分离的几个阶段,AST 信息可序列化。通过库的支持,程序能够获取到 AST 级别的信息,将大大增强对于代码的操控能力。对于 IDE 而言,代码补全、重构是重要的功能,然而如果没有底层的支持,只使用 tags 分析或是正则表达式匹配是很难达成的。

当然,GCC 也有其优势:

  • 支持 JAVA/ADA/FORTRAN
  • 当前的 Clang 的 C++ 支持落后于 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 的设备之上... 我个人感觉 Apple 在开源界口碑较差(也许是我的错觉?),不过 Apple 也为开源界贡献了不少,Webkit,OpenCL(虽说只是个标准),Clang。我最为佩服的是虽然出身于命令行之上的 Unix 族系统,但有魄力写出自成体系的图形栈,其图形界面优美而人性化,可谓也为开源界贡献了自己的精神与思想。 对于 Clang 这个很有潜力的项目,我希望其 C++ 支持(尤其是 template 支持)能够早日完善。因为 GCC 在 template 出错时的诊断信息如同小说一般...

LLVM 与 Clang 介绍相关推荐

  1. LLVM 与 Clang 介绍 — LinuxTOY

    LLVM 与 Clang 介绍 - LinuxTOY LLVM 是 Low Level Virtual Machine 的简称,这个库提供了与编译器相关的支持,能够进行程序语言的编译期优化.链接优化. ...

  2. [转] 编译器Clang介绍

    LLVM 与 Clang 介绍 { 撰文/guest } 来源:http://linuxtoy.org/archives/llvm-and-clang.html LLVM 是 Low Level Vi ...

  3. llvm安装方式_安装 LLVM 和 Clang

    LLVM 是伊利诺伊大学的一个开源项目,LLVM 提供了完整的 C/C++工具链,Clang 属于其中的一个子项目,是 LLVM 原生的 " C/C++/Objective-C" ...

  4. 转:GCC,LLVM,Clang编译器对比

    GCC,LLVM,Clang编译器对比 转自: http://www.cnblogs.com/qoakzmxncb/archive/2013/04/18/3029105.html 在XCode中,我们 ...

  5. 解读帖子:结构化编译器前端 Clang 介绍(VS2017编译clang)

    因为需要提取出头文件或源文件的函数名列表和相应的函数参数类型,我想从已有的编译器中寻找函数调用,于是我找到了--结构化编译器前端 Clang 介绍 这个贴子折腾了我很久(还有几个开源项目我也没有搞定) ...

  6. Hexagon LLVM编译架构介绍(3)

    Hexagon LLVM编译架构介绍(3) 3.3 输入输出文件 3.4 编译器选项 3.3 输入输出文件 LLVM 编译器预处理并将一个或多个 C 源文件编译为汇编源文件. 然后编译器调用 Hexa ...

  7. Hexagon LLVM编译架构介绍(12)

    Hexagon LLVM编译架构介绍(12) 3.5 警告和错误信息 3.5.1 控制诊断的显示方式 3.5.2 诊断映射 3.5.3 诊断类别 3.5.4 使用编译器选项控制诊断 3.5.5 使用编 ...

  8. LLVM与Clang编译图例

    LLVM与Clang编译图例 参考链接: https://blog.csdn.net/u012874859/article/details/108530256

  9. LLVM与Clang局部架构与语法分析

    LLVM与Clang局部架构与语法分析 Clang与LLVM LLVM整体架构,前端用的是clang,广义的LLVM是指整个LLVM架构,一般狭义的LLVM指的是LLVM后端(包含代码优化和目标代码生 ...

最新文章

  1. oracle时间戳找回数据库,【备份恢复】 闪回数据库(三) 基于时间戳闪回数据库...
  2. 【初探HTML本相】道之真谛不过自然,html标签脱俗还真
  3. python-文件基本操作(二)
  4. python设计一个动物类_python面向对象 动物园 例题
  5. 在 Linux 命令行上编辑照片的 4 种方法
  6. webpack4.x最详细入门讲解
  7. EntityFramework Core进行读写分离最佳实践方式,了解一下(二)?
  8. ICPC 2019-2020 North-Western Russia Regional Contest 补题部分
  9. Tycoon:针对多种平台上的Java JIMAGE的勒索软件
  10. 什么叫小米粒吸尘机器人_2020年,吸尘器推荐选购,家用吸尘器什么牌子好?扫地机器人推荐,吸尘器选购避坑指南!...
  11. flask-sqlalchemy Multiple Databases
  12. 熟悉相关电路,控制I/O口,且配置相关参数,LED,光敏,74LS164数码管
  13. mysql 矩表_mysql表某相同值最近一次出现的间距
  14. 面向对象与面向过程的理解——个人想法
  15. 22-02-08数据库迁移sql问题
  16. java毕业设计视频点播系统Mybatis+系统+数据库+调试部署
  17. 大数据系统架构的基本介绍
  18. iOS中设置百度地图自定义标注图片,自定义泡泡
  19. ITE平台开发 chapter4 - https通信
  20. 搜索引擎下拉食云速捷详细_下拉框搜索隙云速捷甄选,下拉框 搜索度云速捷真诚,...

热门文章

  1. 【NOIP 2016 提高组】蚯蚓
  2. pytorch apex +ddp 分布式训练+数据优化
  3. tf.train.exponential_decay的用法
  4. 【FPGA】vivado2019安装卡在optimize disk usage怎么办
  5. 【AI实战】手把手教你深度学习文字识别(文字检测篇:基于MSER, CTPN, SegLink, EAST等方法)...
  6. 这四个微信小技巧,职场人一定要学会
  7. 下载整个网站 有什么工具可以下载整个网站的内容吗?
  8. ubuntu:“NMI watchdog: BUG: soft lockup-CPU#0 stuck for 22s“
  9. USB射频功率计DIY——构建软件校准方案
  10. java聊天系统异常问题_聊天室bug问题