LLVM 与 Clang 介绍 — LinuxTOY

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 出错时的诊断信息如同小说一般...

{ Thanks guest. }

LLVM 与 Clang 介绍 — LinuxTOY相关推荐

  1. LLVM 与 Clang 介绍

    晚上听国软徐纪元学弟给我说起了他刚装上的 Mac Lion 操作系统,也说到了最近 Apple 推出的新版本的 Xcode 4.2 在 iOS 4.iOS 5 程序开发中,加入了 automatic  ...

  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. OpenAI首次推出数学定理推理模型GPT-f,23个推导结果被专业数据库收录
  2. @AutoWired和@Resource注解异同分析
  3. 电中在线计算机应用基础二考试题目及答案,最新电大2015计算机应用基础作业2 答案.doc...
  4. PE文件感染和内存驻留
  5. 苹果挖迪士尼墙脚:喜获视频服务总监
  6. SQL注入风险高,手写 SQL 须谨慎
  7. 延时等待的gcode
  8. java snakeyaml_SnakeYaml快速入门和使用
  9. java 求tan角度求值_知道sin、cos、tan的角度如何求值,不用计算器
  10. 软件设计模式Day01--简单的模拟鸭子应用
  11. php关键词分析工具,搜索引擎关键词查询分析工具
  12. 开源搜索引擎排名第一,Elasticearch是如何做到的?
  13. Excel实用技巧,超漂亮的Excel图表来了!
  14. 批归一化(Batch Normalization)详解
  15. 性能测试时那些「难以启齿」的问题-CPU相关
  16. python中的repr_python中的 __repr__和__str__
  17. 打开Qt Creator软件时报警告:xxx.exe应用程序错误
  18. 解决打开WEB ADI的excel文件时出现Run-time error '1004' 的错误
  19. 电子邮箱哪家最安全,各家电子邮箱安全性盘点!
  20. 新概念2 课文和单词(6)

热门文章

  1. C++面试笔记(2)
  2. Protobuf在Unity中的通讯使用
  3. C++入门经典-例8.3-子类显示调用父类构造函数
  4. Quartz2D简单图形
  5. hdu 1150 Machine Schedule (经典二分匹配)
  6. autocad.net中ResultBuffer相关的常量值
  7. OSMboxPost()
  8. 安卓如何运行python_如何在android上运行Python代码?
  9. 用神经网络模拟分子:钠的卤化物
  10. access期刊可以重投几次_又被拒稿了?老司机带你一投即中