替代Objective-C?Swift語(yǔ)言尚不成熟

2014-06-06 09:33:39來(lái)源:infoq作者:郭蕾

Swift是一門(mén)蘋(píng)果自主開(kāi)發(fā)的編程語(yǔ)言,它由LLVM的創(chuàng)始人Chris Lattner在2010年開(kāi)始著手設(shè)計(jì),目標(biāo)是在保證應(yīng)用質(zhì)量和性能的前提下,讓?xiě)?yīng)用開(kāi)發(fā)變得更加簡(jiǎn)單、快速。蘋(píng)果宣稱(chēng)Swift的特點(diǎn)是:快速、現(xiàn)代、安全、互動(dòng),且全面優(yōu)于Objective-C語(yǔ)言。

在2014年蘋(píng)果的開(kāi)發(fā)者大會(huì)上,最引人注目的當(dāng)屬新的編程語(yǔ)言Swift的發(fā)布。Swift是一門(mén)蘋(píng)果自主開(kāi)發(fā)的編程語(yǔ)言,它由LLVM的創(chuàng)始人Chris Lattner在2010年開(kāi)始著手設(shè)計(jì),目標(biāo)是在保證應(yīng)用質(zhì)量和性能的前提下,讓?xiě)?yīng)用開(kāi)發(fā)變得更加簡(jiǎn)單、快速。蘋(píng)果宣稱(chēng)Swift的特點(diǎn)是:快速、現(xiàn)代、安全、互動(dòng),且全面優(yōu)于Objective-C語(yǔ)言。為了給Swift打好基礎(chǔ),蘋(píng)果公司改進(jìn)了編譯器、調(diào)試器和框架結(jié)構(gòu),不難看出蘋(píng)果在Swift的設(shè)計(jì)上也煞費(fèi)苦心。社交媒體上一時(shí)間鋪滿(mǎn)了對(duì)Swift的討論:

JavaEye的創(chuàng)始人Robbin在微博中寫(xiě)到:“Swift目前只是提供了一種腳本編程語(yǔ)法,編寫(xiě)代碼的效率提高不了多少,對(duì)程序員來(lái)說(shuō),熟悉Swift語(yǔ)法也不過(guò)一天時(shí)間足夠了。關(guān)鍵是要提供高級(jí)數(shù)據(jù)類(lèi)型,簡(jiǎn)化Cocoa類(lèi)庫(kù),否則用不用Swift都沒(méi)區(qū)別。當(dāng)代的程序員,主要學(xué)習(xí)成本不在編程語(yǔ)言的語(yǔ)法上,而在語(yǔ)言提供的特殊數(shù)據(jù)類(lèi)型和龐大的類(lèi)庫(kù)上。”

CNET的Tim Stevens認(rèn)為Swift是一門(mén)具有巨大潛力的編程語(yǔ)言,它在結(jié)合了腳本語(yǔ)言與傳統(tǒng)編譯語(yǔ)言的優(yōu)勢(shì)的同時(shí),又兼有更快的執(zhí)行速度(從幾項(xiàng)關(guān)鍵指標(biāo)來(lái)看)。Swift的腳本特性以及實(shí)時(shí)預(yù)覽功能可以幫助開(kāi)發(fā)者方便快捷地編寫(xiě)并測(cè)試應(yīng)用程序。但Swift也沒(méi)有想象中的那么美好,Objective-C在開(kāi)發(fā)應(yīng)用方面相對(duì)比較成熟,并且有了完整的生態(tài)圈,Swift想推倒一切重新開(kāi)發(fā),恐怕還需要一段時(shí)間。

\

資深iOS開(kāi)發(fā)者郭亮認(rèn)為Swift對(duì)于準(zhǔn)備學(xué)習(xí)iOS開(kāi)發(fā)的新手來(lái)說(shuō)是個(gè)好消息,畢竟它的入門(mén)門(mén)檻比較低,但對(duì)于已經(jīng)習(xí)慣了Objective-C的上百萬(wàn)開(kāi)發(fā)者來(lái)說(shuō),又是一件痛苦的事情!因?yàn)樗麄円呀?jīng)愛(ài)上了Objective-C。Swift雖然門(mén)檻很低,但要真正熟練,道路依然荊棘,Protocol、Extension、繼承、多態(tài)還有閉包,真的沒(méi)那么簡(jiǎn)單。語(yǔ)言剛剛發(fā)布,還會(huì)有許多的不完善,其性能、效率還有待驗(yàn)證,并且相關(guān)資料非常少,應(yīng)該只有蘋(píng)果官方的文檔,也沒(méi)有開(kāi)源社區(qū)的支持。所以Swift短期內(nèi)取代Objective-C的可能性非常小,目前想用Swift單獨(dú)作為項(xiàng)目的開(kāi)發(fā)語(yǔ)言,那將是災(zāi)難性的。

iOS開(kāi)發(fā)者黃兢成也在知乎上發(fā)表了自己的看法,他認(rèn)為Swift 吸收了很多其它語(yǔ)言的語(yǔ)法,寫(xiě)起來(lái)比Objective-C簡(jiǎn)潔得多,不過(guò)它的核心概念和Objective-C差不多,比如引用記數(shù)、ARC、 屬性、協(xié)議、接口、初始化、擴(kuò)展類(lèi)、匿名函數(shù)。至于大會(huì)上提到的可視化編程,他目前尚不清楚如何能較好的應(yīng)用到實(shí)際項(xiàng)目中。Xcode 6 beta版本對(duì)Swift的語(yǔ)法提示支持也不好。Swift在實(shí)際項(xiàng)目中的使用還需要一段時(shí)間,但他相信蘋(píng)果發(fā)布Swift,絕不是玩玩而已。

CocoaChina上的xu54認(rèn)為Swift本質(zhì)其實(shí)就是Objective-C的文本變種,對(duì)于這門(mén)全新的語(yǔ)言,蘋(píng)果做的工作其實(shí)遠(yuǎn)沒(méi)有我們想像的艱巨。LLVM編譯器做工作只是先把Swift翻譯成Objective-C代碼,然后再把Objective-C代碼翻譯成C語(yǔ)言代碼,然后再把C語(yǔ)言代碼翻譯成匯編,最終翻譯成機(jī)器碼。至于為什么編譯器廠商這么繞,不直接把自己的語(yǔ)言翻譯成匯編和機(jī)器碼,那是由于現(xiàn)有的語(yǔ)言編譯器(Objective-C、C )已經(jīng)非常成熟,而高級(jí)語(yǔ)言間的文本轉(zhuǎn)換開(kāi)發(fā)成本和維護(hù)成本都極其小。Swift之所以要翻譯成Objective-C,是由于Swift仍然需要Objective-C中的ARC、GCD 等環(huán)境。既然Swift其實(shí)就是Objective-C, 對(duì)入門(mén)者而言遠(yuǎn)比Objective-C好學(xué),對(duì)資深開(kāi)發(fā)者來(lái)說(shuō)又能節(jié)約很多無(wú)謂的低級(jí)重復(fù)的機(jī)械代碼(這些代碼在LLVM翻譯成Objective-C時(shí),編譯器自動(dòng)幫你寫(xiě)上),并且開(kāi)發(fā)者關(guān)注的應(yīng)該是業(yè)務(wù)邏輯,而不把精力分散在語(yǔ)法等低級(jí)問(wèn)題上,語(yǔ)法消耗的時(shí)間越少,這門(mén)語(yǔ)言也就越成功,所以他覺(jué)得Swift必定會(huì)替代Objective-C。

社區(qū)對(duì)Swift的評(píng)論好壞參半,Swift的優(yōu)勢(shì)很明顯,短板也很明顯。新語(yǔ)言的成熟不可能一蹴而就,我們還需要有更多的耐心來(lái)等待Swift的成熟,不過(guò)我相信這個(gè)過(guò)程不會(huì)太久。蘋(píng)果愿意舍棄成熟的Objective-C,轉(zhuǎn)而開(kāi)發(fā)新的編程語(yǔ)言,這足以讓我們看到一家世界級(jí)公司的魄力與創(chuàng)新力。

關(guān)鍵詞:Objective-CSwift

贊助商鏈接: