據(jù)國外媒體報(bào)道,《連線》雜志日前撰文解析了蘋果新編程語言Swift的諸多優(yōu)勢。文章表示,由于這門語言易于上手,吸收了編譯型語言與解釋型語言的長處,而且有諸多蘋果產(chǎn)品為依托,Swift的普及速度會讓其他語言望塵莫及。
以下為《連線》“蘋果Swift將很快改變編程的三大理由”一文:
克里斯·拉特納(Chris Lattner)花了一年半時(shí)間打造了一套新的編程語言。他沒有向任何人提起這件事,甚至連他最親密的朋友和同事也不知道。
他利用晚上和周末的時(shí)間進(jìn)行這項(xiàng)工作,從2010年夏天開始一直干到第二年年末,將這門編程語言的骨架搭建完畢,然后向公司高管透露了自己的秘密。這個(gè)項(xiàng)目得到了高管們的重視,數(shù)名資深工程師加入了進(jìn)來。18個(gè)月之后,該項(xiàng)目成為了公司主要關(guān)注的對象,項(xiàng)目團(tuán)隊(duì)規(guī)模擴(kuò)大了不少。
拉特納工作的公司,就是蘋果。
這門語言叫做“Swift”。蘋果認(rèn)為這是一個(gè)更快速、更有效開發(fā)iPhone、iPad以及Mac電腦軟件應(yīng)用的工具。今年6月2日,蘋果向公司外部的程序員發(fā)布了一個(gè)測試版本。即便是在這個(gè)時(shí)候,也就是在拉特納首次設(shè)想這門語言4年之后,它也只是在蘋果內(nèi)部圈子里產(chǎn)生了影響。拉特納在伊利諾伊大學(xué)香檳分校的研究生導(dǎo)師維克拉姆·艾德福(Vikram Adve)幫助他完善了Swift語言的基礎(chǔ)。和其他人一樣,艾德福對自己的學(xué)生花了這么長的時(shí)間打造一門新的編程語言這件事也感到吃驚。“蘋果公司口風(fēng)很緊,克里斯真是貫徹了這一點(diǎn),”艾德福笑著說。“我知道他在一個(gè)項(xiàng)目上花了很多時(shí)間,僅此而已。”
通常來說,像這樣面世的一款新編程語言,通常需要多年時(shí)間才能獲得大規(guī)模采用——即便有蘋果這種規(guī)模的科技巨頭支持也不例外。谷歌在2009年推出過一門名叫“Go”的語言。雖然這門語言的設(shè)計(jì)者在業(yè)內(nèi)鼎鼎有名,但它仍然沒有在全球范圍內(nèi)成為主流。
不過Swift就是另一回事了。等到今年秋天正式發(fā)布時(shí),它可能會以前所未見的速度很快獲得程序員的青睞,甚至有可能超越Sun的Java語言,以及微軟的C#語言在20世紀(jì)90年代末與21世紀(jì)初的風(fēng)頭。
Swift的部分優(yōu)勢在于,它是為普通程序員打造的。這門語言設(shè)計(jì)用來編寫最簡單的手機(jī)應(yīng)用,而且配有一個(gè)被蘋果稱之為“操場”(Playground)的智能工具。該工具提供了一種相當(dāng)有效的“自學(xué)”編程方式。
此外,Swift之所以可能風(fēng)靡起來,還有一個(gè)更直接的理由。在今天,成千上萬的開發(fā)者使用一種名叫“Objective-C”的語言,為iPhone和iPad打造應(yīng)用,考慮到蘋果設(shè)備的普及程度,這些程序員會一直開發(fā)此類應(yīng)用。而和Objective-C相比,Swift在很多方面提供了重大的改進(jìn),這意味著龐大的蘋果開發(fā)者社區(qū)肯定會在未來數(shù)月接受這種新語言。
Tiobe指數(shù)(這是一個(gè)用來衡量編程語言流行程度的指標(biāo))的編纂者、關(guān)注編程語言發(fā)展近15年的保羅·詹森(Paul Jansen)表示:“就谷歌Go來說,沒有什么真正的激勵因素來使用它。相比之下Swift可以提供這樣的激勵。”
到目前為止,即便使用的人數(shù)非常有限,在流行的編程網(wǎng)站GitHub上,與Swift相關(guān)的項(xiàng)目也超過了2400個(gè)。而且在本月,Swift在Tiobe全球編程語言熱門排行榜上排名第16。谷歌Go在2009年發(fā)布時(shí)的情況與之類似,不過在之后排名便下降了很多。但就Swift來說,詹森口中的激勵因素只會推高其排名。
Facebook的開發(fā)元老安德雷·亞歷山德雷斯庫(Andrei Alexandrescu)指出,考慮到Swift在蘋果產(chǎn)業(yè)鏈中獨(dú)一無二的核心地位,“只要不胡搞”肯定就不會失敗。何況這門語言的學(xué)習(xí)門檻非常低。“人們會搶著學(xué)習(xí)這門新語言,因?yàn)橛盟兂珊苋菀祝?rdquo;詹森表示。“程序員可以用Objective-C,也可以用Swift,大部分人都將轉(zhuǎn)向Swift。”
不只是一門語言
拉特納負(fù)責(zé)監(jiān)督蘋果所有的開發(fā)工具——正是這些工具讓蘋果的工程師和外部的程序員為這家公司的電腦、筆記本、智能手機(jī)與平板電腦開發(fā)軟件。在艾德福的指導(dǎo)下,這位伊利諾伊大學(xué)香檳分校的研究生曾設(shè)計(jì)過一套名為LLVM的元編程工具。該工具是蘋果軟件開發(fā)主要工具Xcode的基礎(chǔ),后者最新版本的下載次數(shù)已經(jīng)超過了1400萬。簡單說,LLVM是生成并運(yùn)行新應(yīng)用的一種方式,可以和所有編程語言配套使用。
拉特納在2005年加入蘋果。這之后蘋果用LLVM重塑了開發(fā)者使用Objective-C開發(fā)應(yīng)用的方式。5年后,拉特納又把LLVM作為Swift的基礎(chǔ)。拉特納拒絕了媒體的采訪,但在他的個(gè)人主頁上有對Swift演化過程的簡要介紹。不管這個(gè)長期項(xiàng)目多么與眾不同,實(shí)際上Swift還是要與蘋果現(xiàn)有的開發(fā)工具共同工作——雖說它提供了一種替代Objective-C的選擇。
換言之,Swift不光是一門編程語言。它與開發(fā)人員打造軟件所需要的所有東西都緊密地結(jié)合在一起。這里不光是指集成開發(fā)環(huán)境(IDE),也包括調(diào)試器這樣的其他工具。這些工具大多被蘋果開發(fā)者所熟悉。換言之,對成千上萬為iPhone、iPad以及Mac電腦開發(fā)應(yīng)用的程序員來說,Swift很容易上手。
還是要有充分的理由才能讓程序員從Objective-C轉(zhuǎn)投Swift,畢竟他們過去從未用過Swift。“我是第一個(gè),也是唯一一個(gè)具備4年Swift編程經(jīng)驗(yàn)的人,”拉特納在Twitter上寫到。學(xué)習(xí)這樣一門語言是需要犧牲一定時(shí)間的,這通常是個(gè)大障礙。為蘋果硬件開發(fā)了15年軟件產(chǎn)品的麥克·艾什(Mike Ash)說道:“只有很少一些語言能獲得足夠關(guān)注,大部分語言吸引使用者的時(shí)間都很長。”艾什現(xiàn)在正在鉆研公司的這門新語言。
好在拉特納和蘋果已經(jīng)給出了充分的理由。就其本身來說,Swift和C#、Ruby、Python等編程語言比起來沒有太多吸引力,但與Objective-C相比有很大的進(jìn)步。后者的歷史可以追溯到上世紀(jì)80年代中期,平心而論不如更現(xiàn)代的編程語言易用。艾什表示:“許多人因?yàn)镺bjective-C和它那不常見的語法放棄了。Swift的語法更標(biāo)準(zhǔn)、更常見,這有助于吸引感興趣的人。”
對現(xiàn)在的程序員來說,Swift不僅更熟悉——它有“泛型”這樣的設(shè)計(jì),也就是可以重復(fù)使用的基礎(chǔ)模組——而且還有用來避免程序員出錯(cuò)的工具。它能提供一種叫做“推測輸入”的功能,憑借這種功能程序員就不用花費(fèi)太多時(shí)間來定義所用變量的類型。艾什表示:“它可以提供很多幫助,可以更好地理解你在做什么,也能讓電腦幫助你把事情想得更清楚。它能讓程序員更有效率,用更短的時(shí)間完成更多的事情。”
還有就是“操場”,包括艾德福在內(nèi)的很多人都認(rèn)為,這是該語言中最有趣的地方。
操場之中
按照拉特納個(gè)人主頁上的說法,“操場”是要讓編程“更具交互性更直觀。”他解釋稱,“操場”在很大程度上受到了蘋果設(shè)計(jì)師布雷特·維克多(Bret Victor)以及一個(gè)叫做Light Table的交互編程系統(tǒng)的影響。和Light Table類似,Swift的“操場”可以讓用戶在屏幕一側(cè)寫代碼,在另一側(cè)看到運(yùn)行的效果。
在6月初蘋果開發(fā)者大會上介紹Swift的時(shí)候,拉特納演示了如何用“操場”實(shí)時(shí)修改一款游戲。簡單說,該工具可以向軟件中加入新代碼,而不用重新編譯或讓整個(gè)程序重啟。Light Table的創(chuàng)建者克里斯·格朗閣(Chris Granger)表示:“它可以把修改的東西注入到一個(gè)正在運(yùn)行的進(jìn)程中——放到正在運(yùn)行的程序中。”
這樣做不僅是讓編程更容易,而且提供了一種更好的學(xué)習(xí)編程的方法——讓人人都學(xué)會這種技能。“希望更直觀有趣的編程工作可以吸引下一代程序員,并重新定義計(jì)算機(jī)科學(xué)的教學(xué)方式,”拉特納寫到。
Light Table做的事情和這差不多——而且可以用多種語言實(shí)現(xiàn)這一點(diǎn),例如Python、Clojure和Javascript。但對格朗閣來說,“操場”更為實(shí)用,因?yàn)镾wift為此進(jìn)行了專門的優(yōu)化。他說:“因?yàn)樗麄兛刂屏苏Z言——這是他們創(chuàng)建的語言——他們的目標(biāo)就是做到這一點(diǎn)。他們能做那些我們用其他語言無法做到的事情。”
這也是一個(gè)立竿見影的激勵因素。妨礙編程語言普及的一大因素就是程序員沒有時(shí)間去學(xué)習(xí)。“操場”則具有減少學(xué)習(xí)時(shí)間的能力。按照艾什的說法,“操場”現(xiàn)在還有些bug,但具備了讓編程更流暢的潛力。“一般來說,編程工作很耗時(shí)——要花時(shí)間看反饋——弄明白自己在做什么。但‘操場’提供的反饋是實(shí)時(shí)的,這可以吸引很多新人。”
速度
“操場”體現(xiàn)出了Swift的另一個(gè)優(yōu)勢,那就是反應(yīng)迅速。它編譯起來很快,這意味著從源代碼到可執(zhí)行應(yīng)用的轉(zhuǎn)變時(shí)間很短;編譯后出爐的應(yīng)用執(zhí)行起來也很快,這意味著程序可以在手機(jī)或平板電腦上高速運(yùn)行。這也是Swift與其他編程語言不同的地方。
過去,像Objective-C和C++這樣的編譯型語言與Python、Ruby以及PHP這樣的解釋型語言兩者間存在區(qū)別。編譯型語言在寫完代碼之后,必須要等待編譯器將其轉(zhuǎn)化為可執(zhí)行的軟件。不過一旦這一工作完成,可執(zhí)行的軟件運(yùn)行的速度很快。解釋型語言則可以幾乎實(shí)時(shí)地測試程序,但成品的運(yùn)行速度沒有那么快。
Swift取長補(bǔ)短。這種新語言在開發(fā)和運(yùn)行時(shí)不會犧牲速度。正如艾什指出的那樣,Swift“既對程序員友好,也對機(jī)器友好”。他表示:“具體的運(yùn)行效果如何還要再看,不過到目前為止看上去還不錯(cuò)。”
這一領(lǐng)域并非只有蘋果。Facebook也在通過“Hack”語言和“D”語言做類似的嘗試,谷歌則是“Go”語言,火狐瀏覽器的開發(fā)商Mozilla用的是“Rust”。從某些方面看,這些語言的發(fā)展都要快過Swift。Facebook已經(jīng)在使用“Hack”重建自己的大型網(wǎng)絡(luò)服務(wù),谷歌則使用“Go”改進(jìn)內(nèi)部業(yè)務(wù)。
更重要的是,這些語言大多數(shù)都是開源的。這意味著它們背后的代碼可以被全世界免費(fèi)使用。從理論上說,它們可以更輕松地在其他公司的設(shè)備或服務(wù)上運(yùn)行。Swift并不開源——至少現(xiàn)在還不是——而且考慮到蘋果緊緊控制自己軟硬件產(chǎn)品的歷史,自然會有這家公司是否會限制該語言發(fā)展的擔(dān)憂。艾什表示:“有人擔(dān)心蘋果會限制該語言發(fā)展的方向——也就是能否撰寫跨平臺的代碼以及類似的事情。”
即便如此,Swift的普及速度恐怕也是其他語言無法企及的。艾什相信,蘋果最終會將Swift開源,而且他也相信該語言會在蘋果的控制之外發(fā)展壯大——因?yàn)樵撜Z言的開發(fā)者拉特納有著很深的開源情節(jié)。“有他在掌舵,我覺得他會做出正確的選擇”。在開發(fā)Swift之前,拉特納曾打造過一個(gè)叫做“Clang”的編譯程序。“Clang”就是開源的,現(xiàn)在被包括谷歌在內(nèi)的很多公司使用。
就算Swift被蘋果牢牢控制,它的影響可能也會超過近年來涌現(xiàn)的其他語言,而且它的普及速度可能也會快過現(xiàn)代歷史上所有的語言。這就是擁有iPhone、iPad以及Mac電腦的優(yōu)勢。
的確,Swift能做的事情,其他許多軟件也能做——有些甚至做得更好。Light Table甚至就有“操場”的替代品。
但Swift是獨(dú)一無二的。