Swift 5.2 改進編譯器診斷功能,提供用戶更有用的錯誤信息

Apple 自家力推的編程語言 Swift 推出了 5.2 版本,這個版本的更新重點,在於改進開發者的體驗,包括改善編譯器診斷信息以及代碼完成功能,也增加了除錯器的可靠性,同時也改善了 Swift 套件管理器處理相依性的方法。

Swift 5.2 改進編譯器診斷功能,提供用戶更有用的錯誤信息

蘋果官方在這個 Swift 更新版,大幅提高了 Swift 編譯器錯誤信息的品質和準確性。過去編譯器會試圖通過分解表達式,在子表達式中搜索錯誤,以猜測錯誤的正確位置。官方解釋,這個方法對於只利用子表達式,而無需父表達式信息,就能搜索到的錯誤才有用,對於其他種類的程序開發錯誤是無效的。

而由於編譯器在遭遇到錯誤的時候,會遺留一些小線索,這些線索可以讓編譯器產生更準確的診斷信息,因此從 Swift 5.2 開始,編譯器現在會正確的指出發生錯誤的代碼位置,並且提供可供修正的信息,而不會像是在 Swift 5.1 中,錯譯信息可能含有錯誤的行數等誤導信息,增加開發者除錯困難。

Swift 5.2 的代碼完成功能也獲得改進,官方減少了不必要的類型檢查步驟,因而使代碼完成功能執行速度提升,在較大的項目中,新版速度為 Xcode 11.3.1 版本的 1.2 到 1.6 倍,還能在不完整的字典字面常數(Dictionary literal)以及不完整的三元表達式,提供隱式成員的名字。而出現在結果中的類型也更容易閱讀,必要情況才會列出父類型。

在所有支持的平臺,Swift 除錯器 LLDB 的運作現在可靠許多。由於除錯信息的重建類型信息現在更具彈性,使得除錯器可以使用更多關於 Swift 類型的信息。值得注意的是,LLDB 也可以從 DWARF 除錯信息中導入 C 和 Objective-C 類型,而不需要從源碼編譯 Clang 模組。預設情況下,當傳統 Clang 模組導入失敗時,這個配置將會作為備用路徑。

Swift 5.2 中的套件管理器,現在不會解析僅在測試目標中使用的套件相依項目,因而提高了執行性能,同時還減少相依項目衝突的可能性,而且套件管理器現在使用一種新的策略來解析套件相依性,明顯提升錯誤信息的品質,以及複雜套件圖中的性能。


分享到:


相關文章: