Swift 4路線圖
Swift 4預計預計在2017年底發布。該版本旨在源代碼和ABI層面實現語言的穩定性,新增特性將會包括改進后的泛型以及一個受Rust/Cyclone啟發的內存所有權模型。
Swift 4的開發將分成兩個階段。第一階段將包含所有使Swift ABI穩定所需要的特性,同時又要保證兼容Swift 3源代碼。第二個階段還有點不確定,可能也會包含大大小小的新特性,前提是它們不會改變現有語言特性的ABI或者破壞到標準庫的ABI。
源代碼兼容性
雖然穩定性可能會妨礙語言能力的發展,但源代碼兼容是一個基本要求。為了推動語言的快速發展,同時又保證源代碼兼容性,Swift團隊將擴展現有的@available屬性,讓它既可以表示某項特性與特定的平臺或操作系統版本有關,也可以表示和特定的Swift語言版本相關。
例如,你可以通過下面的代碼聲明一個API在Swift 3.1中已廢除:
@available(swift, obsoleted: 3.1)
class Foo {
//...
}
ABI穩定性
使Swift ABI穩定一方面需要為將要新增的特性奠定基礎,這是通過“彈性(resiliency)”特性實現的,它會提供一種方法,讓公共API在演化的同時保證ABI的穩定性。這是可以實現的,例如,明確API的哪些部分可以變,而又不會破壞ABI,從而減少在某些面向對象語言中出現的脆弱的基類問題。
另一方面,使ABI穩定需要清理掉語言中現有的依賴,那樣,它們就不會成為ABI的固定部分。特別地,有許多這樣的改進已經得到確認,比如:
-
條件一致性 :它表達的意思是,一個泛型類型,只有當它的類型參數滿足特定的要求時才符合特定的協議。以Array集合為例,只有當它的元素是Equatable類型時,才能實現Equatable協議:
extension Array: Equatable where Element: Equatable { static func ==(lhs: Array<Element>, rhs: Array<Element>) -> Bool { ... } }
-
遞歸協議要求 :允許關聯類型與外圍協議一致。例如,Subsequence本身應該是Sequence,因此,Swift 4將允許下面這個當前不合語法的定義:
protocol Sequence { associatedtype Iterator : IteratorProtocol ... associatedtype SubSequence : Sequence // 當前不合語法,但應該可以 }
-
關聯類型的where語句 :將現在可以在泛型類型參數中使用的、富有表現力的where帶給了關聯類型,例如:
protocol Sequence { associatedtype Iterator : IteratorProtocol associatedtype SubSequence : Sequence where SubSequence.Iterator.Element == Iterator.Element ... }
最后,還有許多工作是為了在Swift 4中添加一個類似Rust/Cyclone的內存所有權模型。Rust內存管理以 實體所有權 的概念為基礎,通過它可以跟蹤誰負責釋放它或誰可以使用它。結合生存期的概念,可以避免最終釋放實體時出現懸空引用。C語言方言 Cyclone (目前已經不再開發)就使用了一種 基于區域的內存管理模型 ,為每個已分配實體指定一個區域,提高分配/釋放的性能,更好地支持已釋放實體的檢測。擴展Swift內存管理模型對系統程序員以及所有迫切需要性能穩定的情況特別有用。可以預見的是,向Swift添加一種內存所有權模型已經超出了第一階段的范圍,該階段的目標是有一個整體的設計,以便了解它將給ABI帶來什么變化。
來自:http://www.infoq.com/cn/news/2016/10/swift-4-roadmap