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