swift3.0的改變

Swift在這2年的時間內,發展勢頭迅猛,在它開源後,更是如井噴一樣,除了 iOS、mac 平臺,還支持了 Linux。 而今年下半年, Swift 3.0 也會隨之發佈。https://github.com/apple/swift-evolution詳細介紹了3.0的特性。

 

這個版本的主要目標增強語言的二進制接口和標準庫的穩定性,作爲這個過程的一部分,我們將改善swift語言以提供在體驗和執行(feel and implementation)的整體的一致性,Swift 3.0將包含2個對2.X source-breaking的改變,更具體地說,這個版本集中在幾個關鍵領域:


一、穩定的ABI(Stable ABI)


提供了穩定的ABI以保證可以向前兼容,這涉及到運行時的數據結構,名稱矯正(name mangling),調用約定(calling conventions)等等。


穩定的ABI也延伸到標準庫,它的數據類型,和核心算法。成功的ABI的穩定性意味着將來的swift版本的應用程序和庫的編譯可以在swift3.0二進制級別的應用程序和庫,即使源語言的發生變化。

 

二、極強的擴展適應能力,爲後續的版本打好基礎(Resilience)


所謂易碎接口嘛,是現代程序語言的一個通用問題,它的全稱叫做 Fragile Binary Interface。 簡單來說呢,就是 Swift 以及當前的大多數主流開發語言中的類的屬性,在底層都是通過偏移來訪問的,比如book.name, 我們在程序中訪問一個對象的屬性非常直觀。 但他在編譯後,實際上是這樣的形式location(book) + offset(name)。訪問 name 屬性是通過 book 對象所在的內存地址加上一個偏移來實現的。


那麼 Swift 中的類在編譯後,會將它所有的屬性的偏移值也都計算出來。這樣會加快程序在運行時的執行速度,因爲不需要在運行時再計算這些偏移量了。如果所有的類之間沒有任何關聯就不會有什麼問題,但在實際中,我們使用類都會有繼承關係。假如我們的主項目中引用了一個外部的庫,我們主程序中繼承了這個外部庫中的類。那麼如果這個庫中有任何改動,我們都必須重新編譯所有的類繼承樹上面的代碼,否則在我們主程序的子類中,就會發生偏移計算錯誤。


簡單來說呢,如果 Swift 3.0 能把 Fragile Binary Interface 處理好的話,對我們開發者最直觀的感受就是: 編譯速度加快。

 

三、可移植性(Portability)


這個很簡單,就是讓 Swift 能移植到更多的其他平臺,並且讓 Swift 寫出的代碼,可以正確的運行在所有這些平臺上。

 

四、重新整理類型體系(Type system cleanup and documentation)


重新設定類型轉換規則,以及它們在編譯器的類型檢查的實施,目的是一個更小,更簡單的類型系統,更嚴格的定義和更可靠的類型檢查。

 

五、全面支持泛型(Complete generics)


全面泛型化,可以使得 Swift 能提供更好的擴展適應能力,特別是標準庫。目前的 Swift 版本已經很好的支持了泛型的大部分特性了,這點大家在看 Swift 2.2 的 API 文檔中其實已經能夠發現了。但目前還並沒有將泛型的特性完全實現,所以這次 Swift 3.0 打算全面支持泛型的所有特性。

 

六、Focus and refine the language


聚焦在語言本身,改進語言不好的地方。

 

七、API design guidelines


這次還發布了 Swift 語言的 API 設計規範。 這個規範的目的是讓大家設計出更加統一的 API,裏面給出了很多代碼規範,這個非常值得一看,即便我們不去構建開源庫,對我們的日常代碼風格也是很有幫助的。並且 Swift 3.0 會對大多數 API 根據這個規範進行重新設計。理解了這個設計規範,對我們理解 Swift 語言也是很有幫助的。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章