Chris Lattner談Swift 3和Cocoa“重命名”
近日,在“ swift-evolution ”郵件列表中,Swift創建者Chris Lattner在一篇博文中概述了Swift 3定義的一些指導原則,并明確表示該版本會帶來破壞性修改。
由于新特性的設計和實現本身還存在許多未知,所以預測Swift 3最終會包含什么并不容易。雖然認識到了這一點,但Lattner還是著重指出了Swift 3的主要目標以及有助于該目標實現的幾個方面:
Swift 3 […]的目標是推動Swift下一波應用熱潮,讓Swift為更多的人所用。以下幾個方面有望成為實現這一目標的動力:Linux(及其他平臺)上的Corelibs+Swift開發成為現實,新用戶出現;SwiftPM[Swift包管理器]成為一款優秀的工具,并形成了自己的特色;Swift語言/stdlib進一步成熟。
鑒于Swift 3的范圍已經明確定義,Lattner補充道,許多“好的想法”將會被擱置,尤其是需要對語言進行重大擴展而又不影響核心模型的想法:
我認為,對于Swift 3,我們有一貫的方法,我們一直致力于修復基本語言的核心缺陷、修復實現問題以及設計影響ABI穩定性的彈性功能,同時對語言進行小幅擴展。
一個例子是, 靈活的成員初始化 是一個可能不會納入Swift 3的特性,而另一個例子是, 屬性行為 是一個在Swift 3中備受期待的特性,該特性有助于消除一些同 lazy
、 @NSManaged
等實現相關的“編譯器魔法(compiler magic)”。
此外,Swift 3將帶來大量的破壞性修改,這主要是由重命名Cocoa方法使它們更像Swift導致的:
由于Cocoa重命名將要落地,Swift2到Swift 3將會不可避免地給代碼帶來破壞性變化,而我們將會另外構建令人印象深刻的遷移技術。
重命名Cocoa方法 意味著若干變化 ,例如:
-
移除 不必要 的指定期望參數類型的單詞,簡化方法名稱,例如:
let content = listItemView.text.stringByTrimmingCharactersInSet(NSCharacterSet.whitespaceAndNewlineCharacterSet())
將變成:
let content = listItemView.text.trimming(.whitespaceAndNewlines)
-
移除Foundation API的NS前綴,比如
var NSDateComponentUndefined: Int { get }
將變成var dateComponentUndefined: Int { get }
- 方法聲明中增加參數默認值,比如,為可空的尾部閉包參數指定默認值
nil
,為名字中包含options
、attributes
、info
等的數組和字典參數指定默認值[]
和[:]
。
Lattner有關Swift 3并非源代碼兼容的聲明引發了 一些 抱怨 。Lattner本人表示,他認識到他們不能再這樣下去,長時間按照“開發人員的步伐”修改Swift,但是,他希望從Swift 3到4的過渡會更簡單些。不過,蘋果計劃提供一個 遷移開關 ( -swift3-migration
),使開發人員能夠更輕松地將Swift 2.2的代碼移植到Swift 3。
來自: http://www.infoq.com/cn/news/2016/02/lattner-swift3-renamification