LLVM是Apple官方支持的编译器,而该编译器的前端是Clang,这两个工具都被集成到了Xcode里面。在这篇文章中,我们来了解一下LLVM和Clang背后的故事。

在很长一段时间里,Apple一直使用GCC作为官方的编译器。GCC作为开源世界的编译器标准一直做得不错,但Apple对编译工具提出了更高的要求。

仗着自己在开源社区的地位,GCC 开发者对Apple的Objective-C语言新增的很多特性不予理睬,甚至当Apple想做的很多功能需要用模块化的方式来调用 GCC时,GCC却一直不给做。一般的公司遇到这种情况,可能都有些受不了,何况是乔布斯领导的Apple呢?

与GCC的不和让Apple一直在寻找一个高效的、模块化的、协议更放松的开源的编译器替代品。最终,Apple相中了Chris Lattner的LLVM。

现在依然就职于Apple的Chris Lattner可是一位大神,他于2000年毕业于俄勒冈州波特兰大学计算机科学专业,同年前往UIUC(伊利诺伊大学厄巴纳香槟分校),攻读计算机科学硕士和博士学位。在UIUC期间,他的GPA是4.0(满分),并不断地研究探索关于编译器的未知领域,发表了多篇论文。在硕士毕业论文中,他提出了一套完整的在编译时、链接时、运行时甚至是在闲置时优化程序的编译思想,奠定了LLVM的基础。

LLVM在Chris Lattner念博士时更加的成熟。首先,LLVM使用GCC作为前端来对用户程序进行语义分析产生 IF(Intermidiate Format),然后,LLVM使用分析结果完成代码优化和生成。这项研究让Chris Lattner在2005年毕业的时候,成为了小有名气的编译器专家。他也因此早早地被Apple相中,成为其编译器项目的骨干。

进入Apple之后,Chris Lattner首先在OpenGL小组做代码优化,把LLVM运行时的编译架在OpenGL栈上,这样OpenGL栈能够产出更高效率的图形代码。这个强大的OpenGL实现被用在了后来发布的Mac OS X 10.5上。同时,LLVM 的链接优化被直接加入到Apple的代码链接器上。

一个好的工具,必须要有用武之地。几年之后,LLVM的机会就来了。Mac OS X 10.6 Snow Leopard的新功能,完全得益于LLVM的技术,而这一个版本,也是将LLVM推向真正成熟的重大机遇。

“一个篱笆三个桩,一个好汉三个帮”,LLVM能够实现很多华丽的功能,要归功于LLVM自身的新前端——Clang。
GCC系统庞大而笨重,因此,Apple决定从零开始写C、C++、Objective-C语言的前端Clang,以求完全替代掉GCC。

Clang于2007年开始开发,C编译器最早完成,在2009年的时候,Objective-C编译器已经完全可以用于生产环境,而在一年之后,Clang基本实现了对C++编译的支持。

Clang一个重要的特性是编译快速、占内存少,而代码质量还比GCC来得高。得益于本身健壮的架构和Apple的大力支持,Clang越来越全能,支持的项目越来越多,如Mac OS X 10.6时代的Xcode和Interface Builder等,皆由Clang编译。Clang的加入也代表着LLVM真正走向成熟。

此外,Clang有一个重要的衍生项目是静态分析工具,能够通过自动分析程序的逻辑,在编译时就找出程序可能的bug,这个功能叫做ARC。ARC的实现让当时的广大开发者们大为惊愕。

除了LLVM核心和Clang以外,LLVM还包括一些重要的子项目,比如一个原生支持调试多线程程序的调试器LLDB和一个C++的标准库libstdc++。不光是Apple,很多的项目和编程语言都从LLVM中取得了关键性的技术。

从LLVM的发展历程中可以看到,LLVM在短短五年内(2005年-2010年)取得了快速的发展,这充分反映了Apple对于产品技术的远见和超强的执行力。也正是因为这样,LLVM一跃成为了最领先的开源软件技术之一。而大神Chris Lattner也在2010年赢得了Programming Languages Software Award(程序设计语言软件奖)。

大神的故事还没有结束,Chris Lattner于2010年7月开始着手Swift编程语言的设计工作,他实现了该语言的大部分基础架构。2011年末,又有几位大神加入了该项目。2013年7月,Swift项目成为了苹果开发者工具部门的主要焦点。在2014年6月2日,Swift语言正式发布,Chris Lattner及其工作又一次赢得了广大开发者们惊愕的目光。目前,Chris Lattner是苹果公司开发者工具部门的主管,领导Xcode、Instruments和编译器团队。

LLVM和Clang背后的故事相关推荐

  1. Mac OS X 背后的故事(二)——Linus Torvalds的短视

    文/王越 <Mac OS X背后的故事>系列文章将为大家介绍Mac OS X的发行版本.技术历史.相关人物等内容.本文是系列连载的第二篇,主要的故事来源是Linus Torvalds的自传 ...

  2. Mac OS X 背后的故事(九)半导体的丰收(下)

    文 / 王越 随着CPU与GPU合并成技术发展的趋势,苹果开发出了OpenCL框架,能够进行高速并行处理的能力使OpenCL成为了业界标准,被广泛应用. 最近几年,GPU的发展吸引了很多来自科学计算界 ...

  3. LLVM与Clang编译图例

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

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

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

  5. 图像处理经典图片Lena背后的故事

    点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达本文转自|新机器视觉 在数字图像处理中,Lena(Lenna)是一张 ...

  6. HTML5背后的故事

    乍一看,你可能觉得HTML5是网页编写语言HTML的第5个版本.但实际上,这背后的故事可乱得多. HTML5是一个叛逆.它是由一群自由思想者组成的团队设计出来的,这个团队的成员并不负责制定官方HTML ...

  7. LLVM 与 Clang 介绍 — LinuxTOY

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

  8. android 新闻编辑,超机访问:ZOL手机新闻编辑背后的故事

    在上周超机访问中,我们为大家介绍了手机频道评测刘宇航和手机的故事.通过上期节目,我们对这位评测编辑以及他的工作.使用手机的偏好有了一个全面的了解.本期节目我们再次请到了中关村在线的编辑,来讲讲他和手机 ...

  9. 我眼中的计算机,我眼中的计算机-计算机开机背后的故事

    我眼中的计算机-计算机开机背后的故事 (20页) 本资源提供全文预览,点击全文预览即可全文预览,如果喜欢文档就下载吧,查找使用更方便哦! 14.90 积分 ? 我们每天使用计算机必 须要做的第一件事就 ...

最新文章

  1. Dungeon Master(三维bfs)
  2. python删除字符串中的字母_在Python中删除字符串中的大写字母
  3. Linux系统编程--3(exec 函数族,僵尸进程和孤儿进程,wait和wait_pid回收子进程)
  4. 人工智能如何提升大数据存储与管理效率?
  5. 基于DEAP库的python进化算法-3.简单遗传算法的实现
  6. 全表行转列——动态SQL
  7. 四种方法实现两个等大数组之间内容交换
  8. 时钟模块ds1302的使用
  9. 3D缺陷检测---小论文
  10. cuda10安装——在CentOS上安装的艰难过程
  11. 考研英语不熟悉的词义(List1-List5)
  12. docker配置mysql 中间件 ProxySQL
  13. OpenGL如何显示透明PNG
  14. 机器视觉/图像处理可能用到的三方库(各个库的优缺点)
  15. 安全模式下的自动启动
  16. CSS属性以及属性值(样式)
  17. 如何破解PDF文档不能打印?
  18. 1989-2020中国省级平均受教育年限与学历结构数据
  19. Everything.exe命令行激发窗口查询
  20. C语言 数组插入 – 插入法排序(顺序版)

热门文章

  1. HTML5支持服务器发送事件(Server-Sent Events)-单向消息传递数据推送(C#示例)
  2. 电视机计算机英语,电视电脑的优缺点英语作文
  3. 什么是套利型创业者?
  4. 【计量经济学导论】12. 格兰杰因果关系检验
  5. 【调剂】黑龙江大学电子工程学院王国涛副教授课题组招收2022级硕士研究生
  6. 蒙提霍尔问题(The Monty Hall Problem)解析(贝叶斯分析、Python仿真)
  7. Python文件操作与PDF处理
  8. 返渡岛——迷途知返的传说
  9. pythonif多个条件同时满足_Python if有多个条件怎么办
  10. 我的心像洋葱,需要一层一层剥开,你才明白这颗心多爱你:Abstract中继承关系中,变量初始化与构造方法的关系