专栏名称: 唐巧
我叫唐巧,InfoQ 编辑,《iOS开发进阶》作者,现在在猿题库创业。本账号主要分享我精选的 iOS 开发文章和一些创业感悟。
目录
相关文章推荐
51好读  ›  专栏  ›  唐巧

Swift 之父 Chris Lattner 访谈录(超长完整版)

唐巧  · 公众号  · ios  · 2017-09-06 20:00

正文

请到「今天看啥」查看全文


其实我没感觉整个过程有什么不同。 直到今天我还夜以继日、废寝忘食得写代码,我并不是坐那边动动嘴皮子,指挥别人干活的老板。我其实每个周末都在写代码,我很忙的。

Swift

7. Swift 是如何诞生的?在苹果这样一个大厂,决定做出如此巨大的变革,同时还是在封闭的环境下,你是如何一步步实现的?

首先,苹果内部所有的项目都不尽相同 -- 工作流程、战略规划、实施细节,到最后发布。Swift 也一样,没有可比性。因为苹果本身就是小组单兵作战模式 -- 每个组负责不同的大方向,组里自己计划和工作,甚至招人都是各自招。

言归正传,契机发生在2010年了。当时好像是我们刚刚完成了 Clang 对 C++的支持。你也知道 C++ 写起来有多丑,但是做个编辑器支持 C++,完善 C++ 这门语言就是另一回事了,我们当时搞了好久终于完成的时候特别有成就感。当然 Clang 远没有到达完美的地步。

我又扯远了。除了做 Clang 以外,无论是 C语言,C++,还是 Objective-C,都有一些我不是很满意的地方。所以我就想要不我们搞个新的语言来吧。新的语言要越简单越好。一开始大家都没认真,后来我跟很多同事聊了之后觉得新语言的计划可行,而且大家都很亦可赛艇。于是我们就用业余时间开始顶层设计和写代码。

现在问题来了,因为我们已经有 Objective-C 了。虽然它有几个地方很丑,比如老是用 "@",每句结束了还要打分号,但是这些并不妨碍它是一门伟大的语言。 所以,我们为什么要开发新语言,而不是把精力花在优化 Objective - C 上?

原因有三。

第一,如果我们大幅优化 Objective - C,把很多 Swift 的特性加进去,这对开发者来说是灾难性的,因为他们要对原来的 APP 要进行大幅修改;

第二,Objective - C 很多特性积重难返,比如它安全性上的问题;

第三,Objective - C 是基于 C 开发的语言,所以你无论怎么优化,它必然有 C 语言自身的缺陷。

于是我们就动手做 Swift 了,它的背后有着数百人的努力: 支持 Xcode,开发 Playground,兼容调试器和编译器。我个人感到最骄傲的一点是,我们并不打算自己内部把它做到完美 -- 我们开源、我们依靠社区,这样一门语言才能在无数开发者的实战中得到检验和改进,我想这才是 Swift 最棒的地方。

8. 你之前在优化 Objective-C 的时候,有没有想到什么地方是未来 Swift 可以用得到的?

ARC。我们其实一直都在争论是用垃圾回收机制(garbage collection)还是 ARC,后来决定了是 ARC。

另一个是模块化,我们也将这一部分的经验带到了 Swift 开发中。

其实,很多数组和字典方面的语法优化本来是计划在 Objective - C 上面的。但是后来我们开发了 Swift,于是这些改进被直接用在了新语言上,所以大家会在写 Swift 的时候觉得似曾相识,因为本来这些就是 Objective-C 的升级版本嘛。

我可以透露一个有意思的事情。我们在做 Swift 的时候,很多 iOS 开发者,包括苹果内部的工程师,都在吐槽我们这几年在 Objective - C 上毫无建树,都在说你们为什么不做这个那个。我们当然不能告诉他们我们在全力开发 Swift,而他们所要的语法功能我们都会给。

9. 苹果内部对于 Swift 的使用情况和开发是怎么看得?

Swift 团队对于开发上有明确的目标和计划,应用二进制接口(ABI)的稳定性一直是我们的首要目标。很多人很喜欢我们开源的 Swift Playground。同时 iOS 系统内置的 Music App 也是 Swift 写的。其实用不用 Swift 主要是技术和开发方面的考量,苹果内部同时得兼顾稳定性和开发效率,这不是说大家喜不喜欢这个语言的问题。

Swift 刚发布的时候,内部很多组都很惊讶:我们已经有了 Objective-C,为什么还要搞新的 Swift?而且 Objective-C 本身就很不错,开发起来也很顺手。后来渐渐 Swift 成熟了,大家也爱上了这个新生儿。

内部其实对于 Swift 一个很大的顾虑在于,苹果的所有开发必须兼容32位机器,而32位的应用都采用了 Objective-C 的 runtime 机制。这就要求 Swift 团队也弄出个类似的机制,或者弄个兼容的方案,否则 Swift 无法与 AppKit 适配。

10. 开源后的 Swift 发展态势喜人,你对此有什么看法?

开源之后,Swift 发展之好让我咋舌,然而这也是问题所在。

当年我们开源了 LLVM 和 Clang,它们也发展喜人。我们的对手 AMD 们完全跟不上我们。但是跟 Swift 比起来,它们的发展也太慢了,LLVM 和 Clang 开源后完全没有 Swift 这么火。

Swift 就不同了,开源一年之后,我们就有了上百万的开发者在使用这门语言 -- 我和很多有丰富开源经验的老工程师都吓了一跳,这简直了!然后我们每天收到无数的邮件和 pull requests,要求更新这个、要求优化那个,我们的节奏完全被打乱了。我们如何规划开发?我们如何把 Swift 的开发导向一个正确的方向?这些问题随着时间的推移和经验的积累,慢慢找到了解决之道。

我现在觉得开源这个决定至关重要。一来大家会帮着优化;二来我们有个巨大的论坛,在那里大家可以畅所欲言,全世界的人都在帮着 Swift 进步,这真的很棒。我们虽然没有一开始就具体计划要开源,但是苹果内部当时都觉得 Swift 肯定有一天要开源。

苹果与特斯拉

11. 苹果好像一直是个封闭的公司,你们内部对于开源怎么看?

苹果其实有开源的传统。 LLVM 虽然不是始于苹果,但是最终是苹果完成并将其开源。Clang 则完完全全是生于斯开源于斯。还有其他工具,比如 LLDB,libc+,以及compiler-rt 都是如此。

所以对于 Swift 来说,开源只是时间问题。当年从 Swift 1.0 到 Swift 2.0,一切都乱七八糟。当时我们重点在开发错误处理机制,还有协议、拓展等一系列重要的功能。所以开源 Swift 1.0,并不是一个好选择,因为这些重要的东西都没有,而这些开发是当务之急。当 Swift 2.0 到来的时候,我们才有空去开源、去做社区拓展和论坛搭建。开源社区可以帮我们修复细节,我们这时候可以更多的投入在架构设计上。

12. 苹果最让你怀念的是什么?

苹果是这样一个公司,你可以选择你喜欢的东西,然后努力工作去实现它,最终你的工作会落实在产品上,影响亿万计的人。

有很多公司,你可以努力工作,但是不一定能做你喜欢的东西;你做出来东西,可能会被束之高阁;你做的产品,也许最后很幸运的发布,但是并不一定有很多人会用。在苹果,你的工作可以真正改变世界,很有成就感。

13. 你觉得到特斯拉之后,还会努力为 Swift 做出贡献吗?







请到「今天看啥」查看全文