蘋果新貴 Swift 之前世今生

蘋果新貴 Swift 之前世今生

做爲一個70後程序員,克里斯先後發明了 LLVM、Clang 和 Swift,請問你做了什麼?

<iframe id="iframeu1462222_0" src="http://pos.baidu.com/gcnm?rdid=1462222&dc=2&di=u1462222&dri=0&dis=0&dai=2&ps=830x820&dcb=BAIDU_SSP_define&dtm=BAIDU_DUP_SETJSONADSLOT&dvi=0.0&dci=-1&dpt=none&tsr=0&tpr=1463022662901&ti=%E8%8B%B9%E6%9E%9C%E6%96%B0%E8%B4%B5%20Swift%20%E4%B9%8B%E5%89%8D%E4%B8%96%E4%BB%8A%E7%94%9F--%E7%99%BE%E5%BA%A6%E7%99%BE%E5%AE%B6&ari=1&dbv=0&drs=1&pcs=1260x883&pss=1260x905&cfv=20&cpl=4&chi=1&cce=true&cec=UTF-8&tlm=1462993862&ltu=http%3A%2F%2Fchijianqiang.baijia.baidu.com%2Farticle%2F18501&ltr=https%3A%2F%2Fwww.baidu.com%2Flink%3Furl%3DV7mVOnYhwNZrU02Jn0ZtBETmS23ThHNrVG7RkY7sfkx4YdrZ6vRmlhX6DhyT-CbldSg-j-YcWneqR1XF3wQLo_%26wd%3D%26eqid%3Dab53d07000039700000000035733f42d&ecd=1&psr=1920x1080&par=1920x977&pis=-1x-1&ccd=24&cja=true&cmi=7&col=zh-cn&cdo=-1&tcn=1463022663&qn=f6b238ec5a41f053&tt=1463022662894.30.165.165" width="250" height="250" align="center,center" vspace="0" hspace="0" marginwidth="0" marginheight="0" scrolling="no" frameborder="0" allowtransparency="true" style="margin: 0px; padding: 0px; font-family: inherit;font-size:undefined; font-style: inherit; font-variant-caps: inherit; line-height: inherit; vertical-align: bottom; -webkit-font-smoothing: antialiased; border-width: 0px;"></iframe>

上週出差勞頓,這篇文章幾次動筆都未完成,常常躺倒牀上就昏睡過去。南方的天氣悶熱潮溼,讓我感到極度的不適應,等到回到北方,天高雲清,空氣乾爽,讓人產生一種「解放區的天是明朗的天」的感覺,我甚至覺得自己的手機、Pad 和 Mac 都滿血復活了……直到有人提醒說它們是因爲充電和網速的原因。好吧,南方酒店的網絡還真叫慢啊……

以下是正文:

………………

2010年的夏天,Chris Lattner 接到了一個不同尋常的任務:爲 OS X 和 iOS 平臺開發下一代新的編程語言。那時候喬布斯還在以帶病之身掌控着龐大的蘋果帝國,他是否參與了這個研發計劃,我們不得而知,不過我想他至少應該知道此事,因爲這個計劃是高度機密的,只有極少數人知道,最初的執行者也只有一個人,那就是 Chris Lattner。

從2010年的7月起,克里斯(Chris)就開始了無休止的思考、設計、編程和調試,他用了近一年的時間實現了大部分基礎語言結構,之後另一些語言專家加入進來持續改進。到了2013年,該項目成爲了蘋果開發工具組的重中之重,克里斯帶領着他的團隊逐步完成了一門全新語言的語法設計、編譯器、運行時、框架、IDE 和文檔等相關工作,並在2014年的 WWDC 大會上首次登臺亮相便震驚了世界,這門語言的名字叫做:「Swift」。

根據克里斯個人博客(http://nondot.org/sabre/ )對 Swift 的描述,這門語言幾乎是他憑藉一己之力完成的。這位著名的70後程序員同時還是 LLVM 項目的主要發起人與作者之一、Clang 編譯器的作者,可以說 Swift 語言和克里斯之前的軟件作品有着千絲萬縷的聯繫。

同樣是70後程序員,差別怎麼那麼大呢?

關於作者

克里斯可以說是天才少年和好學生的代名詞,他在2000年本科畢業之後,繼續攻讀計算機碩士和博士。但克里斯並不是宅男,學習之餘他手捧「龍書」遊歷世界,成爲德智體美勞全面發展的好學生。之後就是一篇又一篇的發表論文,碩士畢業論文即提出了一套完整的運行時編譯思想,奠定了 LLVM 的發展基礎,讀博期間 LLVM 編譯框架在他的領導下得到了長足的發展,已經可以基於 GCC 前端編譯器的語義分析結果進行編譯優化和代碼生成,所以克里斯在2005年畢業的時候已經是業界知名的編譯器專家了。

注:很多計算機專業的大學生經常問我在大學裏學點什麼好,看看克里斯就行了。以目前的科技信息開放程度,如果你在自己感興趣的領域裏用心耕耘,再加上那麼一點點天分,畢業時成爲某一個專有領域的專家應該不是問題。那時就不是你滿世界去找工作了,而是工作滿世界來找你!

克里斯畢業的時候正是蘋果爲了編譯器焦頭爛額的時候,因爲蘋果之前的軟件產品都依賴於整條 GCC 編譯鏈,而開源界的這幫大爺並不買蘋果的帳,他們不願意專門爲了蘋果公司的要求優化和改進 GCC 代碼,所以蘋果一怒之下將編譯器後端直接替換爲 LLVM,並且把克里斯招入麾下。克里斯進入了蘋果之後如魚得水,不僅大幅度優化和改進 LLVM 以適應 Objective-C 的語法變革和性能要求,同時發起了 CLang 項目,旨在全面替換 GCC。這個目標目前已經實現了,從 OS X10.9和 XCode 5開始,LLVM+GCC 已經被替換成了 LLVM+Clang。

Swift 是克里斯在 LLVM 和 Clang 之後第三個偉大的項目!

關於語言

2007年之前,Objective-C 一直是蘋果自家院落的小衆語言,但是 iOS 移動設備的爆發讓這門語言的普及率獲得了火箭一般的躥升速度,截止到今天,Objective-C 在編程語言排行榜上排名第三,江湖人稱三哥,大哥二哥分別是 C 和 Java 這樣的老牌語言。同時,蘋果在2012年和2013年分別對 Objective-C 進行了大規模的優化和升級改進,增加了各種現代語言的特性,讓編寫 App 更加容易,更多的程序員投入到了 App Store 的生態圈裏……

在這種情況下,蘋果公司爲什麼會發布一門新語言呢?

這個問題沒有標準答案,不過我們可以試着去分析一下,談談蘋果的心路歷程……

Objective-C 是80年代初 Brad Cox 和 Tom Love 發明的,1988年喬布斯的 Next 公司獲得了這門編程語言語言的授權,並開發出了Objective-C 的語言庫和NEXTSTEP的開發環境。後來 Next 被蘋果收購,Objective-C 陰差陽錯成了蘋果的當家語言。掐指一算,三十年倏忽而過,OC 也成長爲爺爺輩兒的編程語言了。

爲了伺候好這位「爺爺」,蘋果煞費苦心,把 GCC 的編譯鏈先替換成 LLVM +GCC,又替換成 LLVM+Clang,做語法簡化、自動引用計數、增加 Blocks 和 GCD 多線程異步處理技術……終於,OC 在30年後重新煥發出勃勃生機,並佔據了兵器譜排名第三的位置。但是,蘋果卻有點煩了,OC 改進了這麼多年,怎麼看都像是在修修補補,用 Blocks 去實現一個類似 Python 的 lambda 閉包功能,看起來總是那麼彆扭。好吧,既然已經全盤掌握了 LLVM 和 Clang,爲什麼我們不去基於現在的編譯器設計一門全新的語言呢?一門屬於蘋果的語言!你看,鄰居谷歌家裏叫做 Go 的孩子不是玩耍正酣麼?

於是 Swift 誕生了……

當然,事實的真相也可能是行動緩慢的喬老爺子把克里斯拉到一邊說:

「I want to be swift to……」

「 行了,您別說了,不就是想要 swift 嗎,我這就給您做一個去」

於是 Swift 誕生了……

語法

Swift 是一門博採衆長的現代語言,在設計的過程中,克里斯參考了Objective-C,Rust,Haskell,Ruby,Python,C#等優秀語言的特點,最終形成了目前 Swift 的語法特性。我在閱讀了官方教程和做了些代碼實驗之後,自我感覺會喜歡上這門語言,在這裏簡單談點感想,更深入的內容需要你們自己去深入學習。

1、Swift 是面向 Cocoa 和 Cocoa Touch 的編程語言,編譯型語言,生產環境的代碼都需要 LLVM 編譯成本地代碼才能執行,但是Swift又具備很多動態語言的語法特性和交互方式。

2、Swift 是一門類型安全的語言,可以幫助開發者清楚的掌控代碼片段中的值類型。如果你期望輸入的是字符串,類型安全的特性會阻止開發者錯誤地爲其傳遞一個整數。這一切使得開發者能夠更早的發現和修復錯誤。

3、支持各種高級語言特性,包括閉包、泛型、面向對象、多返回值、類型接口、元組、集合等。

4、Swift 能與 Objective-C 進行混合編程,但代碼分屬不同的文件。

5、全面的Unicode支持,你甚至可以用一隻

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章