您好,歡迎來(lái)到58網(wǎng)站目錄!

蘋果新貴 Swift 之前世今生

站長(zhǎng)「蝙蝠俠」:QQ1251270088  瀏覽:1164次 時(shí)間:2014-06-11

上周出差勞頓,這篇文章幾次動(dòng)筆都未完成,常常躺倒床上就昏睡過(guò)去。南方的天氣悶熱潮濕,讓我感到極度的不適應(yīng),等到回到北方,天高云清,空氣干爽,讓人產(chǎn)生一種「解放區(qū)的天是明朗的天」的感覺(jué),我甚至覺(jué)得自己的手機(jī)、Pad 和 Mac 都滿血復(fù)活了……直到有人提醒說(shuō)它們是因?yàn)槌潆姾途W(wǎng)速的原因。好吧,南方酒店的網(wǎng)絡(luò)還真叫慢啊……


以下是正文:


………………


2010年的夏天,Chris Lattner 接到了一個(gè)不同尋常的任務(wù):為 OS X 和 iOS 平臺(tái)開(kāi)發(fā)下一代新的編程語(yǔ)言。那時(shí)候喬布斯還在以帶病之身掌控著龐大的蘋果帝國(guó),他是否參與了這個(gè)研發(fā)計(jì)劃,我們不得而知,不過(guò)我想他至少應(yīng)該知道此事,因?yàn)檫@個(gè)計(jì)劃是高度機(jī)密的,只有極少數(shù)人知道,最初的執(zhí)行者也只有一個(gè)人,那就是 Chris Lattner。


從2010年的7月起,克里斯(Chris)就開(kāi)始了無(wú)休止的思考、設(shè)計(jì)、編程和調(diào)試,他用了近一年的時(shí)間實(shí)現(xiàn)了大部分基礎(chǔ)語(yǔ)言結(jié)構(gòu),之后另一些語(yǔ)言專家加入進(jìn)來(lái)持續(xù)改進(jìn)。到了2013年,該項(xiàng)目成為了蘋果開(kāi)發(fā)工具組的重中之重,克里斯帶領(lǐng)著他的團(tuán)隊(duì)逐步完成了一門全新語(yǔ)言的語(yǔ)法設(shè)計(jì)、編譯器、運(yùn)行時(shí)、框架、IDE 和文檔等相關(guān)工作,并在2014年的 WWDC 大會(huì)上首次登臺(tái)亮相便震驚了世界,這門語(yǔ)言的名字叫做:「Swift」。


根據(jù)克里斯個(gè)人博客(http://nondot.org/sabre/ )對(duì) Swift 的描述,這門語(yǔ)言幾乎是他憑借一己之力完成的。這位著名的70后程序員同時(shí)還是 LLVM 項(xiàng)目的主要發(fā)起人與作者之一、Clang 編譯器的作者,可以說(shuō) Swift 語(yǔ)言和克里斯之前的軟件作品有著千絲萬(wàn)縷的聯(lián)系。


同樣是70后程序員,差別怎么那么大呢?
關(guān)于作者


克里斯可以說(shuō)是天才少年和好學(xué)生的代名詞,他在2000年本科畢業(yè)之后,繼續(xù)攻讀計(jì)算機(jī)碩士和博士。但克里斯并不是宅男,學(xué)習(xí)之余他手捧「龍書」游歷世界,成為德智體美勞全面發(fā)展的好學(xué)生。之后就是一篇又一篇的發(fā)表論文,碩士畢業(yè)論文即提出了一套完整的運(yùn)行時(shí)編譯思想,奠定了 LLVM 的發(fā)展基礎(chǔ),讀博期間 LLVM 編譯框架在他的領(lǐng)導(dǎo)下得到了長(zhǎng)足的發(fā)展,已經(jīng)可以基于 GCC 前端編譯器的語(yǔ)義分析結(jié)果進(jìn)行編譯優(yōu)化和代碼生成,所以克里斯在2005年畢業(yè)的時(shí)候已經(jīng)是業(yè)界知名的編譯器專家了。


注:很多計(jì)算機(jī)專業(yè)的大學(xué)生經(jīng)常問(wèn)我在大學(xué)里學(xué)點(diǎn)什么好,看看克里斯就行了。以目前的科技信息開(kāi)放程度,如果你在自己感興趣的領(lǐng)域里用心耕耘,再加上那么一點(diǎn)點(diǎn)天分,畢業(yè)時(shí)成為某一個(gè)專有領(lǐng)域的專家應(yīng)該不是問(wèn)題。那時(shí)就不是你滿世界去找工作了,而是工作滿世界來(lái)找你!
克里斯畢業(yè)的時(shí)候正是蘋果為了編譯器焦頭爛額的時(shí)候,因?yàn)樘O果之前的軟件產(chǎn)品都依賴于整條 GCC 編譯鏈,而開(kāi)源界的這幫大爺并不買蘋果的帳,他們不愿意專門為了蘋果公司的要求優(yōu)化和改進(jìn) GCC 代碼,所以蘋果一怒之下將編譯器后端直接替換為 LLVM,并且把克里斯招入麾下??死锼惯M(jìn)入了蘋果之后如魚得水,不僅大幅度優(yōu)化和改進(jìn) LLVM 以適應(yīng) Objective-C 的語(yǔ)法變革和性能要求,同時(shí)發(fā)起了 CLang 項(xiàng)目,旨在全面替換 GCC。這個(gè)目標(biāo)目前已經(jīng)實(shí)現(xiàn)了,從 OS X10.9和 XCode 5開(kāi)始,LLVM+GCC 已經(jīng)被替換成了 LLVM+Clang。


Swift 是克里斯在 LLVM 和 Clang 之后第三個(gè)偉大的項(xiàng)目!


關(guān)于語(yǔ)言


2007年之前,Objective-C 一直是蘋果自家院落的小眾語(yǔ)言,但是 iOS 移動(dòng)設(shè)備的爆發(fā)讓這門語(yǔ)言的普及率獲得了火箭一般的躥升速度,截止到今天,Objective-C 在編程語(yǔ)言排行榜上排名第三,江湖人稱三哥,大哥二哥分別是 C 和 Java 這樣的老牌語(yǔ)言。同時(shí),蘋果在2012年和2013年分別對(duì) Objective-C 進(jìn)行了大規(guī)模的優(yōu)化和升級(jí)改進(jìn),增加了各種現(xiàn)代語(yǔ)言的特性,讓編寫 App 更加容易,更多的程序員投入到了 App Store 的生態(tài)圈里……


在這種情況下,蘋果公司為什么會(huì)發(fā)布一門新語(yǔ)言呢?


這個(gè)問(wèn)題沒(méi)有標(biāo)準(zhǔn)答案,不過(guò)我們可以試著去分析一下,談?wù)勌O果的心路歷程……


Objective-C 是80年代初 Brad Cox 和 Tom Love 發(fā)明的,1988年喬布斯的 Next 公司獲得了這門編程語(yǔ)言語(yǔ)言的授權(quán),并開(kāi)發(fā)出了Objective-C 的語(yǔ)言庫(kù)和NEXTSTEP的開(kāi)發(fā)環(huán)境。后來(lái) Next 被蘋果收購(gòu),Objective-C 陰差陽(yáng)錯(cuò)成了蘋果的當(dāng)家語(yǔ)言。掐指一算,三十年倏忽而過(guò),OC 也成長(zhǎng)為爺爺輩兒的編程語(yǔ)言了。


為了伺候好這位「爺爺」,蘋果煞費(fèi)苦心,把 GCC 的編譯鏈先替換成 LLVM +GCC,又替換成 LLVM+Clang,做語(yǔ)法簡(jiǎn)化、自動(dòng)引用計(jì)數(shù)、增加 Blocks 和 GCD 多線程異步處理技術(shù)……終于,OC 在30年后重新煥發(fā)出勃勃生機(jī),并占據(jù)了兵器譜排名第三的位置。但是,蘋果卻有點(diǎn)煩了,OC 改進(jìn)了這么多年,怎么看都像是在修修補(bǔ)補(bǔ),用 Blocks 去實(shí)現(xiàn)一個(gè)類似 Python 的 lambda 閉包功能,看起來(lái)總是那么別扭。好吧,既然已經(jīng)全盤掌握了 LLVM 和 Clang,為什么我們不去基于現(xiàn)在的編譯器設(shè)計(jì)一門全新的語(yǔ)言呢?一門屬于蘋果的語(yǔ)言!你看,鄰居谷歌家里叫做 Go 的孩子不是玩耍正酣么?


于是 Swift 誕生了……


當(dāng)然,事實(shí)的真相也可能是行動(dòng)緩慢的喬老爺子把克里斯拉到一邊說(shuō):


「I want to be swift to……」


「 行了,您別說(shuō)了,不就是想要 swift 嗎,我這就給您做一個(gè)去」


于是 Swift 誕生了……


語(yǔ)法


Swift 是一門博采眾長(zhǎng)的現(xiàn)代語(yǔ)言,在設(shè)計(jì)的過(guò)程中,克里斯參考了Objective-C,Rust,Haskell,Ruby,Python,C#等優(yōu)秀語(yǔ)言的特點(diǎn),最終形成了目前 Swift 的語(yǔ)法特性。我在閱讀了官方教程和做了些代碼實(shí)驗(yàn)之后,自我感覺(jué)會(huì)喜歡上這門語(yǔ)言,在這里簡(jiǎn)單談點(diǎn)感想,更深入的內(nèi)容需要你們自己去深入學(xué)習(xí)。


1、Swift 是面向 Cocoa 和 Cocoa Touch 的編程語(yǔ)言,編譯型語(yǔ)言,生產(chǎn)環(huán)境的代碼都需要 LLVM 編譯成本地代碼才能執(zhí)行,但是Swift又具備很多動(dòng)態(tài)語(yǔ)言的語(yǔ)法特性和交互方式。


2、Swift 是一門類型安全的語(yǔ)言,可以幫助開(kāi)發(fā)者清楚的掌控代碼片段中的值類型。如果你期望輸入的是字符串,類型安全的特性會(huì)阻止開(kāi)發(fā)者錯(cuò)誤地為其傳遞一個(gè)整數(shù)。這一切使得開(kāi)發(fā)者能夠更早的發(fā)現(xiàn)和修復(fù)錯(cuò)誤。


3、支持各種高級(jí)語(yǔ)言特性,包括閉包、泛型、面向?qū)ο蟆⒍喾祷刂?、類型接口、元組、集合等。


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


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

本文地址:http://quema.com.cn/artinfo/779.html
?