開始 iOS 開發後,相信每個人都曾經好奇過:「Apple 明明已經很熟練地使用 Objective-C,為什麼還要特別重新打造 Swift?」
我用 Swift 製作第一個 App 時,也覺得它的語法非常簡潔;但深入了解背後的故事後,才發現這段歷史相當有趣。
先說結論,Swift 是一門由一位名為 Chris Lattner 的工程師從 2010 年開始,幾乎獨自秘密打造的語言。目的在於從根本改善使用超過 30 年、幾乎原封不動的 Objective-C 之安全性問題。
今天就輕鬆聊聊 Swift 是如何走入世界的。
Swift 是什麼時候、由誰打造的?
Swift 的開發始於2010 年 7 月。
主角是 Chris Lattner。這個名字可能有些陌生,但只要是開發者,其實每天都在使用他的作品。
他正是打造LLVM與Clang編譯器的人。這些都是支撐 Apple 開發工具底層的核心技術。
據說早期真的是 Lattner 一個人的專案。他利用下班後與週末的零碎時間,安靜地打磨設計,這段故事相當有名。
約從 2011 年開始,Apple 內部的其他工程師加入,專案逐漸成長為正式的團隊專案。
最後在2014 年 6 月的 WWDC正式公開。當天在場的開發者都大吃一驚,至今仍有人談起這段反應,因為沒有人預料到這場發表。
同年 9 月,Swift 隨 Xcode 6 正式發佈,任何人都能使用。
Chris Lattner 為什麼要取代 Objective-C?
最大的原因只有一個。
Objective-C 是在 1980 年代初期設計的語言,因此缺乏現代化的安全機制。
簡單來說,Objective-C 是「在 C 語言上加入訊息傳遞功能」的架構。它繼承了 C 的彈性,但這份彈性也可能帶來危險。
其中最具代表性的就是nil(空值)處理問題。
在 Objective-C 中,即使對 nil 物件傳送訊息,App 也不會當掉,只是什麼事都不會發生。
乍看之下很方便,但這其實是陷阱。因為由於缺少值而產生的錯誤會悄悄被掩蓋,最後在其他不相干的地方爆發。
Lattner 在打造 LLVM 與 Clang 的過程中,已經長期與 Objective-C 的記憶體安全性問題搏鬥。後來據說他得出了這樣的結論。
「與其持續修補既有語言,不如重新打造一門從一開始就阻止錯誤發生的語言。」
這種想法不只是找出錯誤,而是要讓錯誤本身變得不可能發生。
Swift 到底有哪些不同?
Swift 帶來的變化中,最具象徵性的就是**選擇型別(Optional)**概念。
它要求在語法層級明確標示「這個值可能是空的」,讓開發者一定要處理沒有值的情況。
看看下面的程式碼,就能清楚看出兩種語言在理念上的差異。
首先,Objective-C 即使遇到 nil 也會直接略過。
// name如果是 nil?什麼事都不會發生,安靜地繼續執行
NSString *name = [user fetchName];
NSUInteger len = [name length]; // 結果是 0, 很容易漏掉錯誤
相較之下,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 與伺服器端領域。
一位工程師在週末安靜啟動的專案,竟成為全球開發者使用超過 10 年的語言,這件事讓我深受感動。
這是一門從「為什麼?」這個問題出發的語言,了解背景後,Swift 的每一個語法都會呈現不同的樣貌。
如果你剛開始學 Swift,只要確實理解選擇型別,就能逐漸掌握這門語言為什麼如此設計。希望今天的文章能成為你的第一步。
參考資料
- Swift (programming language) - Wikipedia
- Chris Lattner - Wikipedia
- Apple’s top secret Swift language grew from work to sustain Objective C - AppleInsider

