Chris Lattner 访谈录 翻译作者:@故胤道长,亚马逊 iOS 工程师,曾就职于 Uber
本文是《 iOS 成长之路》22 篇精品文章中的两篇,分享出来给未订阅专栏的 iOS 开发者以及一些其他技术同学,相信无论对于大家技术学习和职业发展都会有莫大帮助。
想要查看《 iOS 成长之路》剩余文章,欢迎扫描二维码关注订阅:
话题
-
Chris Lattner 是谁?
-
Xcode 的编译器 LLVM 背后有怎样的故事?
-
Swift 诞生的前世今生,封闭的苹果为何要拥抱开源?
-
说好的 ABI 稳定性何时能推出?
Chris Lattner 是谁
教育背景
-
伊利诺伊大学 PHD
工作经历
-
2005年 - 2017年供职苹果,前开发部高级总监,架构师
-
2017年开始,担任特斯拉副总裁,负责自动驾驶
主要成就
-
Swift 之父,主要作者
-
LLVM 之父,主要作者
-
Clang 主要贡献者
荣誉
-
2016年被评为“创造未来的25位当世天才”
-
2013年获得 ACM 系统设计大奖
访谈实录
自我介绍
1. 你怎么看待自己?
我是个程序员。我喜欢写代码。我编程有很长时间了。
我在读博的时候就开始写 LLVM 了。当时 LLVM 是我的博士研究项目,我想把它做成工业界中颠覆性的产品。当时我异想天开,尝试了各种架构设计,想解决以往编译器所有的弊端 -- 结果当然没有如愿。我毕业后,就希望能接着搞 LLVM ,当时只有苹果允许我入职之后继续设计并实现 LLVM 。我想都没想就加入了苹果。
LLVM
2. 说说 LLVM(Low Level Virtual Machine)到底是什么吧
-
先说编译器:编译器是把程序员的代码翻译成机器可以理解的语言的工具;
-
再谈LLVM:一个模块化和可重用的编译器和工具链技术的集合,Clang 是 LLVM 的子项目,是 C,C++ 和 Objective-C 编译器,因为多模块的复用,所以提供了惊人的快速编译,比 GCC 快3倍。
3. LLVM 是一开始就作为一个完整的编译工具来使用的吗?还是有什么其他故事
LLVM 当时是为了解决一个小问题而开发的:当使用OpenGL 函数库的时候(Mac OS 10.4 和 10.5环境下),比如你要调用这个函数,glVertex3f(),编译器必须将其转化为特定的GPU可以理解的数据。但是这带来一个问题:市面上有海量的GPU,每个GPU的性能和参数也不尽相同,所要求的数据格式也不同。这时 LLVM 可以产生很小的一部分代码去解决这个问题,这是 LLVM 诞生的初衷。
4. LLVM 的 bytecode 和 Apple 现在的 bitcode 有什么不同?
这是历史遗留问题。一开始 LLVM 是开源的,所有代码在转成二进制时就叫做 bytecode -- 因为 java 当年就是这么叫的。当时这一部分有很多问题:比如不能扩展,无法兼容,非常脆弱。
然后就到了 LLVM 2.0,当时我重新设计了架构,采用的就是 Bitcode 机制。LLVM 2.0 将所有代码以比特流(bit stream)而不是字节流(byte stream)的形式来编码。这就是 bitcode 这一术语的由来。
主要的工作流程就是现将代码转成比特流,然后相应处理。处理完后再将编码传到其他地方去。
5. Bitcode 这个机制比直接传输二进制有什么好处
好处那是多了去了。首先 编译器工作起来会越来越好。因为通过Bitcode机制,它可以通过编译不同代码来存储各种优化方法,这样下次碰到类似代码,它就会自动启动相关优化机制,使得效率提升。还有个好处是 LLVM 可以让芯片的兼容性变得很好。因为 Apple 每年都在芯片上推陈出新,它们转化为二进制的规则都不尽相同,LLVM 只要每次重新编码并传输成比特流就好了。
当然 Bitcode 也不是万能的。比如它不能解决 32位的 APP 在64位机器上的兼容问题。这个问题其实应该依靠代码逻辑。
谈管理
6. 在职业生涯中,你在 LLVM 上鞠躬尽瘁,但我们发现这几年你更多的工作是在管理上,你自己怎么看这种转变的?
我虽然做管理了,但是我依然喜欢写代码,而且我每天都写,因为我就是个极客嘛。而且,其实我很早就开始做管理的工作了。不过我一直是作为技术领导人的角色带 2 到 3 个人的,我只是在写代码方面把把关,给他们提提建议这样。
后来带的人多了,队伍也大了。我不仅管程序员,还管小组经理和其他技术领导人。虽然我一直喜欢写代码,但是管理对我来说是一个必须要去做的事。现在回过头来,我觉得干得还不错。跟