Chris Lattner談Swift 3和Cocoa“重命名”

jopen 8年前發布 | 11K 次閱讀 Swift 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 ,為名字中包含 optionsattributesinfo 等的數組和字典參數指定默認值 [][:]

Lattner有關Swift 3并非源代碼兼容的聲明引發了 一些 抱怨 。Lattner本人表示,他認識到他們不能再這樣下去,長時間按照“開發人員的步伐”修改Swift,但是,他希望從Swift 3到4的過渡會更簡單些。不過,蘋果計劃提供一個 遷移開關-swift3-migration ),使開發人員能夠更輕松地將Swift 2.2的代碼移植到Swift 3。

查看英文原文: Chris Lattner on Swift 3 and Cocoa "Renamification"

來自: http://www.infoq.com/cn/news/2016/02/lattner-swift3-renamification

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!