有人說它相當於 C#,或是相當於 Scala 對 Java 的改進,我可以告訴大家,Swift 不是這樣的語言。它更像一種讓人快速做原型的 toy language。
要求 Apple 發佈下一代 Objective-C 語言的呼聲早就有了,每年寫數萬字 OS X 評論的 Ars Technica 兩年前就寫了 Apple 應該去做一個語言,Objective-C without C 並且使用更現代的功能和更短的 API,以及對自動類型推導的支持,文章見 OS X 10.8 Mountain Lion: the Ars Technica review 。
但 Apple 顯然沒有認真對待這門語言。很明顯的,他們根本不想把ObjC給替換掉。並且按Apple的風格,如果他們把Swift當ObjC的未來來對待,肯定會有一到兩個iOS/Mac應用使用Swift改寫。(比如Apple 當年要砍 Carbon,首先做的就是把 Finder 重寫了)。
從語言角度,Swift 有太多的缺點:
- 它的標準庫太差,只有Dictionary, Array 和 String及數這幾種數據結構,連個 Set 都沒有。想用別的?你還是要用 ObjC 的。
- 它沒有任何對異步/同步編程的支持。它沒法綁定使用 GCD,因此任何正經的網絡應用根本無法編寫。
- 它沒有任何的保護機制(private, protected),所有的 method和 variable 都是全局可見的,這顯然不能滿足正經工程項目的需要。
- 只能和 ObjC 互動。如果你想正經地使用C或者C++,你得寫 ObjC 的 wrapper。
- 沒有辦法 catch Objective-C 的 exception,如果一旦出了 exception,你的 App 立馬就崩了。
Chris 在設計這門語言時,可以明顯地看到他的短視。這也很正常,他是一個做編譯器的,不是做語言研究的。所以這門聲稱支持函數式編程的語言,根本不是函數式的:
- 僅有的支持在lazy,閉包,及簡單的函數語言函數(如map, filter)。這ObjC中都能做
- 沒有pattern matching
- 類型推導差不多和 C++11 差不多,沒有使用hindley milner。
從上面這些特點看, Apple對其的定位僅是給對ObjC頭疼的開發者降低學習曲線所推出的玩具語言。前面五條中的每一條,基本都是致命的,因此 Apple 自己的項目也不會使用。做個早期 proof of concept的 prototype 到是可以的。
我可以想象,實現上 Swift 是很簡單的(LLVM很成熟了,寫個新語言越來越簡單,比如只要幾步就能做個小語言: 1. Kaleidoscope: Tutorial Introduction and the Lexer),當然有可能 Apple 將來會解決這些問題使得其真正實用。但現在來看,Apple 並不希望 Swift 來替代 Objective C。
— 完 —
本文作者:yue wang
【知乎日报】
你都看到这啦,快来点我嘛 Σ(▼□▼メ)
此问题还有 39 个回答,查看全部。
延伸阅读:
学习编程语言最好的方法是什么呢?
为什么现在会有这么多种编程语言?