作者 Sergio De Simone ,譯者 王慶
根據(jù)Apple正在編寫的一份文檔所述,Swift的一個主要設(shè)計目標(biāo)是確保代碼高效執(zhí)行的同時還能對實現(xiàn)進(jìn)行加載期抽象。Apple的設(shè)計文檔提供了與庫設(shè)計者相關(guān)的信息,包括Swift標(biāo)準(zhǔn)庫。
Swift標(biāo)準(zhǔn)庫設(shè)計者面臨的一個主要亟待解決的問題是保證未來客戶端與現(xiàn)有庫之間的兼容性(向前兼容),現(xiàn)有客戶端與未來版本的庫之間的兼容性(向后兼容)。
要解決這個問題只需要確保公有的方法接口不變,保證當(dāng)?shù)讓訉崿F(xiàn)代碼修改時暴漏給使用者的接口仍然有效即可。
關(guān)于蘋果正在推進(jìn)標(biāo)準(zhǔn)庫發(fā)展的討論意在影響Swift的設(shè)計和功能,使得庫設(shè)計者們能在滿足向兼容與向后兼容的同時不要因為加載時的檢查而付出太多的成本。
Apple的文檔定義了一套解決方案來幫助庫設(shè)計者們實現(xiàn)這一目標(biāo):
此外,Apple還說追求加載時抽象從優(yōu)化的角度看是有一定的性能損耗的。的確,許多的優(yōu)化都依賴于這個功能的真正實現(xiàn),即它有沒有訪問全局內(nèi)存、一個struct里的成員的個數(shù)等,因此我們在開發(fā)過程中做向前兼容或者向后兼容時一定要盡力避免這樣的優(yōu)化。
還有一些其他關(guān)注點:使用了內(nèi)聯(lián)代碼,但它應(yīng)該被當(dāng)做當(dāng)前模塊外的代碼,因為它最終會在客戶的模塊里執(zhí)行;本地可用性環(huán)境,會影響“#available”對函數(shù)體的作用方式;對類型的約束,比如說聲明一個類型是“trivial”,或者定義它的最大“size_in_bits”等等。
如前面所提到的,文檔是Apple工作過程中的產(chǎn)物和一些基本改動點的總結(jié),但如果你是一名Swift開發(fā)者還是應(yīng)該多關(guān)注文檔。
查看英文原文:The Evolution of Swift's Standard Library
感謝張龍對本文的審校。