国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 編程 > Swift > 正文

Swift能代替Objective-C嗎?

2020-03-09 17:51:50
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友
這是我在網(wǎng)上上看到的答案,復(fù)制粘貼過(guò)來(lái)和大家分享一下,因?yàn)槲液秃芏嗳艘粯雍荜P(guān)心Swift的出現(xiàn)對(duì)Mac開(kāi)發(fā)的影響和對(duì)Objective-C的影響。
 

我文章的中心是,以 Apple 目前給出的各種資料來(lái)看,這語(yǔ)言不會(huì)替代掉ObjC,它不是下一代的ObjC。它有很多缺點(diǎn),使得它不足以做大型項(xiàng)目。這些缺點(diǎn)使得,Apple 自己都沒(méi)有使用它做 Mac/iOS 的 app。我不排除明年后年它有很大改進(jìn),但至少現(xiàn)在還沒(méi)有這端倪。

因此,如果你會(huì)ObjC,你不需要去看它。

但你如果問(wèn)我這語(yǔ)言對(duì)普通開(kāi)發(fā)者重要不重要,我說(shuō)重要,可以明確告訴你這一點(diǎn)--它是 Apple 在 WWDC 向全世界推出的重磅語(yǔ)言我怎麼能說(shuō)它不重要? 它降低了入門(mén)的門(mén)檻。使得大量的 JS, Python, Ruby用戶(hù)會(huì)使用 Apple 的技術(shù)為其開(kāi)發(fā)程序。它的作用,和 Core Data, Interface Builder 一樣,能讓你快速寫(xiě)出一個(gè)能用的程序來(lái)。但如果你想稍做些正經(jīng)事,就心有馀力不足了。所以和 Apple 自己的 Mail 也不會(huì)去用 Core Data,自己 iPhoto 不會(huì)去用 UICollectionView,稍複雜的 App 都不會(huì)去用 Interface Builder 一樣,Apple 自己不會(huì)用 Swift。它只是給三五個(gè)人的小團(tuán)隊(duì)能迅速做出能用的程序,讓大公司能快速做些 Prototype 而已。

====

有人說(shuō)它相當(dāng)于 C#,或是相當(dāng)于 Scala 對(duì) Java 的改進(jìn),我可以告訴大家,Swift 不是這樣的語(yǔ)言。它更像一種讓人快速做原型的 toy language。

要求 Apple 發(fā)佈下一代 Objective-C 語(yǔ)言的呼聲早就有了,每年寫(xiě)數(shù)萬(wàn)字 OS X 評(píng)論的 Ars Technica 兩年前就寫(xiě)了 Apple 應(yīng)該去做一個(gè)語(yǔ)言,Objective-C without C 并且使用更現(xiàn)代的功能和更短的 API,以及對(duì)自動(dòng)類(lèi)型推導(dǎo)的支持,文章見(jiàn) OS X 10.8 Mountain Lion: the Ars Technica review 。

但 Apple 顯然沒(méi)有認(rèn)真對(duì)待這門(mén)語(yǔ)言。很明顯的,他們根本不想把ObjC給替換掉。并且按Apple的風(fēng)格,如果他們把Swift當(dāng)ObjC的未來(lái)來(lái)對(duì)待,肯定會(huì)有一到兩個(gè)iOS/Mac應(yīng)用使用Swift改寫(xiě)。(比如Apple 當(dāng)年要砍 Carbon,首先做的就是把 Finder 重寫(xiě)了)。

從語(yǔ)言角度,Swift 有太多的缺點(diǎn):

它的標(biāo)準(zhǔn)庫(kù)太差,只有Dictionary, Array 和 String及數(shù)這幾種數(shù)據(jù)結(jié)構(gòu),連個(gè) Set 都沒(méi)有。想用別的?你還是要用 ObjC 的。是的,當(dāng)你用原生數(shù)據(jù)結(jié)構(gòu)時(shí),速度比ObjC快。但是那僅限于那幾個(gè)。 它沒(méi)有任何對(duì)異步/同步編程的支持。它沒(méi)法綁定使用 Grand Central Dispatch,因此任何正經(jīng)的網(wǎng)絡(luò)應(yīng)用根本無(wú)法編寫(xiě)。 

它沒(méi)有任何的保護(hù)機(jī)制(private, protected),所有的 method和 variable 都是全局可見(jiàn)的,這顯然不能滿(mǎn)足正經(jīng)工程項(xiàng)目的需要。 

只能和 ObjC 互動(dòng)。如果你想正經(jīng)地使用C或者C++,你得寫(xiě) ObjC 的 wrapper。這基本限制了你使用大量的 C/C++ 庫(kù)函數(shù)。 
沒(méi)有辦法 catch Objective-C 的 exception,如果一旦出了 exception,你的 App 立馬就崩了。這也基本限制了你使用很多 ObjC 舊代碼庫(kù)。 

Chris 在設(shè)計(jì)這門(mén)語(yǔ)言時(shí),可以明顯地看到他的短視。這也很正常,他是一個(gè)做編譯器的,不是做語(yǔ)言研究的。所以這門(mén)聲稱(chēng)支持函數(shù)式編程的語(yǔ)言,根本沒(méi)有大多函數(shù)式語(yǔ)言都普遍存在的功能:

僅有的支持在lazy,閉包,及簡(jiǎn)單的函數(shù)語(yǔ)言函數(shù)(如map, filter)。這ObjC中都能做 
沒(méi)有pattern matching 
類(lèi)型推導(dǎo)差不多和 C++11 差不多,沒(méi)有使用hindley milner 
從上面這些特點(diǎn)看, Apple對(duì)其的定位僅是給對(duì)ObjC頭疼的開(kāi)發(fā)者降低學(xué)習(xí)曲線(xiàn)所推出的玩具語(yǔ)言。前面五條中的每一條,基本都是致命的,因此 Apple 自己的項(xiàng)目也不會(huì)使用。做個(gè)早期 proof of concept的 prototype 到是可以的。

我可以想象,實(shí)現(xiàn)上 Swift 是很簡(jiǎn)單的(LLVM很成熟了,寫(xiě)個(gè)新語(yǔ)言越來(lái)越簡(jiǎn)單,比如只要幾步就能做個(gè)小語(yǔ)言: 1. Kaleidoscope: Tutorial Introduction and the Lexer),當(dāng)然有可能 Apple 將來(lái)會(huì)解決這些問(wèn)題使得其真正實(shí)用。但現(xiàn)在來(lái)看,Apple 并不希望 Swift 來(lái)替代 Objective C。



注:相關(guān)教程知識(shí)閱讀請(qǐng)移步到swift教程頻道。
發(fā)表評(píng)論 共有條評(píng)論
用戶(hù)名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 阿尔山市| 紫金县| 利川市| 鹰潭市| 农安县| 河源市| 禄劝| 尼勒克县| 五原县| 霍城县| 曲阳县| 龙海市| 大方县| 凤山县| 廉江市| 星子县| 临安市| 闵行区| 洪泽县| 太保市| 佛冈县| 隆化县| 巴东县| 南溪县| 博湖县| 东阿县| 疏附县| 陕西省| 丰台区| 穆棱市| 新巴尔虎左旗| 卢龙县| 余庆县| 湖口县| 南皮县| 东方市| 金山区| 敦化市| 长宁县| 邢台县| 綦江县|