开始进行iOS开发后,任何人都可能至少思考过一次:“Apple明明一直在使用Objective-C,为什么还要特意重新创建Swift呢?”
我第一次用Swift开发应用时,也觉得它的语法非常简洁。但深入了解背后的故事后,才发现这其中有一段相当有趣的经历。
先说结论,Swift是一位名叫Chris Lattner的工程师从2010年开始几乎独自秘密开发的语言。他的目标是从根本上解决已经三十多年几乎没有变化的Objective-C在安全性方面的问题。
今天就来轻松梳理一下Swift是如何走向世界的,以及它诞生背后的背景。
Swift是什么时候、由谁创建的?
Swift的开发始于2010年7月。
主角就是Chris Lattner。这个名字可能有些陌生,但如果你是开发者,其实每天都在使用他的作品。
正是他创建了LLVM和Clang编译器。它们是支撑Apple开发工具底层的核心技术。
据说在早期,这确实是Lattner一个人的项目。他下班后和周末抽时间,悄悄打磨设计的故事广为流传。
大约从2011年开始,Apple内部的其他工程师加入进来,项目逐渐发展成了正式的团队项目。
最终,Swift在2014年6月的WWDC上正式面世。据说当天在现场的开发者都大吃一惊,这场发布完全出乎所有人的预料。
同年9月,Swift随Xcode 6正式发布,从此任何人都可以使用它。
Chris Lattner为什么要用Swift替代Objective-C?
最大的原因只有一个。
Objective-C是一门在20世纪80年代初设计的语言,缺少现代化的安全机制。
简单来说,Objective-C的结构就是“在C语言上增加消息传递功能”。它完整继承了C的灵活性,但这种灵活性也意味着风险。
其中最典型的就是nil(空值)处理问题。
在Objective-C中,即使向nil对象发送消息,应用也不会崩溃。什么都不会发生,程序会悄悄继续执行。
乍看之下很方便,但这正是陷阱。由于值不存在而产生的Bug会被悄悄掩盖,最后在之后某个完全无关的地方爆发。
Lattner在创建LLVM和Clang的过程中,长期致力于解决Objective-C的内存安全问题。后来,他似乎得出了这样的结论。
“与其不断修补现有语言,不如重新创建一门从一开始就阻止错误发生的语言。”
这是一种不只是捕获错误,而是让错误本身变得不可能发生的思路。
Swift到底有哪些不同?
Swift带来的变化中,最具代表性的就是**可选值(Optional)**这一概念。
它要求在语法层面明确表示“这个值可能为空”,从而强制开发者处理没有值的情况。
看下面的代码,就能清楚地看出两门语言在设计理念上的差异。
首先,在Objective-C中,即使是nil也会直接跳过处理。
// name如果是 nil?什么都不会发生,程序会悄悄继续执行
NSString *name = [user fetchName];
NSUInteger len = [name length]; // 结果是 0, 很容易漏掉Bug
而Swift会明确要求开发者处理值不存在的可能性。
// name是 String? 类型——类型会明确表示值可能不存在
let name: String? = user.fetchName()
if let name = name { // 只有存在值时才安全使用
print(name.count)
}
虽然代码很短,但“放任错误不管”和“阻止错误发生”的差异清晰可见。
除此之外,Swift还兼顾了类型推断、简洁的语法和快速的执行速度,因此逐渐受到欢迎。据说Swift不仅参考了Objective-C,也借鉴了Rust、Haskell、Python、Ruby等多种语言的优点。
Swift后来发展得怎么样了?
Swift发布后迅速站稳了脚跟。
简单总结一下主要发展历程如下。
| 时间 | 事件 |
|---|---|
| 2010年7月 | Chris Lattner开始开发 |
| 2014年6月 | 在WWDC上正式发布 |
| 2014年9月 | 随Xcode 6正式发布 |
| 2015年12月 | 以开源项目形式公开(Apache 2.0) |
| 2017年1月 | Lattner离开Apple,加入Tesla |
有趣的是,这门语言的“父亲”Lattner在2017年离开了Apple。之后,Swift项目负责人由Ted Kremenek接任。
尽管如此,Swift至今仍稳稳占据着Apple生态系统核心语言的位置。开源后,它的应用范围也扩展到了Linux和服务端。
一位工程师在周末悄悄启动的项目,最终成为全世界开发者使用了十多年的语言,这一点让我印象非常深刻。
这是一门源于一个“为什么?”的问题的语言。了解它的背景后,Swift中的每一条语法都会显得不一样。
如果你刚开始学习Swift,那么只要真正理解可选值,就能大致明白这门语言为什么会这样设计。希望今天的文章能成为你的第一步。
参考资料
- Swift (programming language) - Wikipedia
- Chris Lattner - Wikipedia
- Apple’s top secret Swift language grew from work to sustain Objective C - AppleInsider

