聊聊 Swift 3.0 - 新版本對我們的影響

lijiyongcn 8年前發布 | 33K 次閱讀 Swift Apple Swift開發

 

Swift 近兩年的發展勢頭非常的迅猛,而在它開源后,更是如井噴一樣的勢頭,除了 iOS 平臺,還支持了 Linux。 而今年下半年, Swift 3.0 也會隨之發布。這次我就和大家聊一下 Swift 3.0 會有什么新東西吧。

Swift 專門為版本更新相關的文檔創建了一個 Guihub 主頁,地址是 https://github.com/apple/swift-evolution

這里面列出了 Swift 3.0 版本著重處理的地方,我來幫大家總結一下:

  • 更穩定的 ABI

所謂 ABI 就是二進制接口, 是更加底層的機制。 我們都熟知 API,是應用程序接口,比如 fun open(path: String) , 這時一個函數簽名,只要我們的程序在編譯的時候能找到這個方法簽名的實現就可以編譯通過。這樣,我們想改變這個方法的具體實現的時候,并不需要修改我們調用層的代碼,只需要將這個方法的實現替換成另外一個庫就可以了。

而 ABI 就更加底層了,它是基于語言和系統層面的。如果 Swift 3 對 ABI 的優化做的足夠好的話,我們就可以之間在之后的版本中引用老版本 Swift 語言編譯的庫了。就不用怕 Swift 語言升級之后,很多第三方庫都需要修改的問題了。

相信有從 Swift 1.x 遷移到 Swift 2 體驗的同學們對這個感觸會更深~ 當然,這是 Swift 3 的一個目標,能不能實現就要看社區的力量了。

  • 解決易碎接口問題

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

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

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

關于 Fragile Binary Interface 更詳細的內容,大家如果有興趣的話可以參考這里: https://en.wikipedia.org/wiki/Fragile_binary_interface_problem

  • 可移植性

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

  • 全面支持泛型

目前的 Swift 版本已經很好的支持了泛型的大部分特性了,這點大家在看 Swift 2.2 的 API 文檔中其實已經能夠發現了。但目前還并沒有將泛型的特性完全實現,所以這次 Swift 3.0 打算全面支持泛型的所有特性。

  • 發布 API 設計規范

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

設計規范地址: https://swift.org/documentation/api-design-guidelines

總結

Swift 是一個快速發展的語言,開源社區源源不斷的給它注入力量。從這次 3.0 的發布內容來看,它正在嘗試解決編程語言最前沿的問題,比如 Fragile Binary Interface , 大家有興趣可以關于它的相關資料,這里就不再贅述。

來自: http://www.swiftcafe.io/2016/05/01/swift3/

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