swift標準庫的發展

DanielleLut 8年前發布 | 9K 次閱讀 Swift iOS開發 移動開發

來自: http://www.infoq.com/cn/news/2016/03/swift-standard-lib-evolution

Apple的一個正在編撰中的文檔表明,swift的一個設計初衷是允許程序運行時的加載時抽象能高效執行。Apple的設計文檔提供了與庫設計者相關的信息,包括swift標準庫。

swift標準庫設計者面臨的一個主要亟待解決的問題是保證未來客戶端與現有庫之間的兼容性(向前兼容),現有客戶端與未來版本的庫之間的兼容性(向后兼容)。

要解決這個問題只需要確保公有的方法接口不變,保證當底層實現代碼修改時暴漏給使用者的接口仍然有效即可。

關于蘋果正在推進標準庫發展的討論意在影響swift的設計和功能,使得庫設計者們能在滿足向兼容與向后兼容的同時不要因為加載時的檢查而付出太多的成本。

Apple的文檔定義了一套解決方案來幫助庫設計者們實現這一目標:

  • 使用版本控制的API,確保用戶想使用某一個特定版本的API時可以限制僅當該版本API可用時調用。
  • 僅允許不會破壞兼容性規則的改動。為此蘋果在每發布一個新版本的庫時都會通過文檔標明所有確定無誤的改動點。這樣的改動點包括修改一個方法的實現,修改一個內部參數名,或者是給參數加上了默認值。另外一些改動則是不允許的,例如改變一個方法的通用要求,或者是改變參數的順序,Apple的庫不僅僅對方法做了標識,也包括結構體、枚舉、協議、類、擴展等等內容的描述。

此外,Apple還說追求加載時抽象從優化的角度看是有一定的性能損耗的。的確,許多的優化都依賴于這個功能的真正實現,即它有沒有訪問全局內存、一個struct里的成員的個數等,因此我們在開發過程中做向前兼容或者向后兼容時一定要盡力避免這樣的優化。

還有一些其他關注點:使用了內聯代碼,但它應該被當做當前模塊外的代碼,因為它最終會在客戶的模塊里執行;本地可用性環境,會影響“#available”對函數體的作用方式;對類型的約束,比如說聲明一個類型是“trivial”,或者定義它的最大“size_in_bits”等等。

如前面所提到的,文檔是Apple工作過程中的產物和一些基本改動點的總結,但如果你是一名swift開發者還是應該多關注文檔。

查看英文原文: The Evolution of Swift's Standard Library

</div>

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