|
作者 | Holly Borla Swift 5.3 正式發(fā)布,Amy Tsai 繪制了一張素描圖,列出了 Swift 5.3 的主要新特性。這張圖描述了 Swift 5.3 的一些新特性以及目標(biāo):繼續(xù)專注于語言改進(jìn),開發(fā)體驗以及擴(kuò)展 Swift 生態(tài)系統(tǒng),以讓 Swift 適用于更多場景。 語言和標(biāo)準(zhǔn)庫新特性和改進(jìn)Swift 5.3 在語言方面做了不少改進(jìn),改善了 Swift 編碼體驗。這些更新的重點是減少樣板和冗余代碼,以及在標(biāo)準(zhǔn)庫中定義更多功能,從而提高 Swift 程序員的生產(chǎn)力。 Swift Evolution 中的以下條款在 Swift 5.3 中得以實現(xiàn):
Swift 5.3 還修復(fù)了幾個常見的編譯器限制問題:
運行時性能改進(jìn)Swift 5.3 顯著改善了進(jìn)進(jìn)制代碼大小和運行時內(nèi)存使用率。這些改進(jìn)所帶來的成果通過多個項目得到了驗證:
二進(jìn)制大小的改進(jìn)因使用方式而有所不同。這種改進(jìn)對通過減小“值函數(shù)”的大小來聲明大量類型的項目意義特別重大,“值函數(shù)”是編譯器為創(chuàng)建,復(fù)制和銷毀值類型而生成的不可見函數(shù)。這對 SwiftUI 應(yīng)用程序特別有利。 此外,Swift 應(yīng)用程序現(xiàn)在在運行時的堆內(nèi)存開銷比較低。Swift 運行時在運行時會緩存較少的信息以跟蹤協(xié)議一致性之類的信息,而運行時的改進(jìn)使這類緩存的必要性降低?,F(xiàn)在,用 Swift 編寫的應(yīng)用程序比使用 Objective-C 編寫的其他程序所使用的堆內(nèi)存更少。 開發(fā)體驗縮進(jìn)Swift 5.3 修改了 SourceKit 中的自動縮進(jìn)實現(xiàn),在以下幾種情形下,自動縮進(jìn)有了很大的改進(jìn):
代碼補全Swift 5.3 進(jìn)一步優(yōu)化了代碼補全的性能和質(zhì)量:
優(yōu)化構(gòu)建Swift 5.3 為編譯器如何處理 Swift 代碼中的聲明引入了新策略。這些更改帶來了一些顯著的優(yōu)化:
這些優(yōu)化是通過在編譯器中更廣泛地采用新的集中式框架來實現(xiàn)的,該框架可記錄細(xì)粒度的依賴項信息,緩存可能需要重復(fù)進(jìn)行的昂貴計算結(jié)果,并自動在 Swift 代碼中檢測依賴項周期。 診斷Swift 5.3 在 Swift 5.2 的診斷優(yōu)化基礎(chǔ)上,又進(jìn)一步提高了錯誤消息的質(zhì)量和準(zhǔn)確性,尤其是在 SwiftUI 代碼中。更具體地說,Swift 5.3 現(xiàn)在已完成向新診斷體系結(jié)構(gòu)的過渡! 5.3 中的許多診斷優(yōu)化都涉及復(fù)雜的泛型代碼,其中泛型參數(shù)會有一些錯誤的情況,例如缺少一致性。例如,考慮以下代碼: struct FormList<FieldID> {在 Swift 5.2 中,編譯器會報告了一個非常隱秘的錯誤消息: 在 Swift 5.3 中,編譯器可以正確報告問題,并提供有用的注釋: error: initializer 'init(_:)' requires that 'Field' conform to 'Identifiable'調(diào)試Swift 5.3 為運行時錯誤提供了更好的錯誤消息。當(dāng)調(diào)試信息可用時,調(diào)試器現(xiàn)在將在標(biāo)準(zhǔn)庫中顯示陷阱的原因,而不僅僅是顯示不透明的無效指令崩潰。 現(xiàn)在,當(dāng)調(diào)試在不同計算機(jī)上編譯的二進(jìn)制文件時,LLDB 更加強(qiáng)大:
生態(tài)Swift Package Manager資源(SE-0271)包現(xiàn)在可以包含運行時所需的資源,例如圖像和其他數(shù)據(jù)文件。資源按 target 確定范圍,并在構(gòu)建程序包時進(jìn)行處理并嵌入到客戶端應(yīng)用程序中??梢允褂?Foundation 的 Bundle API 從源碼中訪問資源。 Apple 平臺特有的資源(例如資源目錄,storyboards 和 CoreData 模型)只能在 Xcode 中構(gòu)建,但是所有平臺都支持通用資源。包清單中的新 API 提供了對將哪些源文件視為資源的控制。 本地化(SE-0278)包現(xiàn)在可以包含可本地化的內(nèi)容,例如 .strings 文件和資源的本地化變體??杀镜鼗膬?nèi)容可以使用 .lproj 目錄添加到程序包中,并且可以使用 Foundation API 進(jìn)行訪問。 二進(jìn)制依賴性(SE-0272)軟件包現(xiàn)在可以以 XCFrameworks 形式分發(fā)預(yù)構(gòu)建庫,從而允許依賴于不能作為源代碼分發(fā)的庫。該功能當(dāng)前僅在為 Apple 平臺構(gòu)建時可用。包清單中的新 API 允許 XCFrameworks 被引用為二進(jìn)制目標(biāo)。 條件目標(biāo)依賴(SE-0273)現(xiàn)在可以將軟件包目標(biāo)的依賴項聲明為有條件的,可以用來限制平臺的依賴項。這為描述支持多個平臺的復(fù)雜目標(biāo)依賴關(guān)系提供了更大的靈活性。 請注意,基于構(gòu)建配置的條件也是 Swift Evolution 的一部分,但尚未實現(xiàn),因此不是 Swift 5.3 的一部分。 |
|
|