swift3.0的改變

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

 

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

  1、穩定的ABI(Stable ABI)算法

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

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

 

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

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

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

簡單來講呢,若是 Swift 3.0 能把 Fragile Binary Interface 處理好的話,對咱們開發者最直觀的感覺就是: 編譯速度加快設計

 

  3、可移植性(Portability)代碼規範

  這個很簡單,就是讓 Swift 能移植到更多的其餘平臺,而且讓 Swift 寫出的代碼,能夠正確的運行在全部這些平臺上。

 

  4、從新整理類型體系(Type system cleanup and documentation)

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

 

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

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

 

  6、Focus and refine the language

  聚焦在語言自己,改進語言很差的地方

 

  7、API design guidelines

  此次還發布了 Swift 語言的 API 設計規範。 這個規範的目的是讓你們設計出更加統一的 API,裏面給出了不少代碼規範,這個很是值得一看,即使咱們不去構建開源庫,對咱們的平常代碼風格也是頗有幫助的。而且 Swift 3.0 會對大多數 API 根據這個規範進行從新設計。理解了這個設計規範,對咱們理解 Swift 語言也是頗有幫助的~

相關文章
相關標籤/搜索