Swift 5.2 发布以及 5.3 规划

最近 Swift 5.2 正式发布了,该版本主要提升了开发体验:

  • 强化了 compiler diagnostics(包括错误和警告),以及 code completion
  • 强化了 debug 的可靠性。
  • 强化了 Swift Package Manager 的依赖处理。
  • 强化了 LSPSwiftSyntax 工具链。

还有一些其它方面的优化。

Language Updates

Swift 5.2 实现了如下 proposals

Improved Compiler Diagnostics

新版大幅度提升了 Swift 编译器的质量,以及错误提示的精确度。

如下代码尝试比较一个不存在的 enum 类型:

enum E { case one, two }

func check(e: E) {
  if e != .three {
    print("okay")
  }
}

Swift 5.1 中,可能会对这个错误提示比较困惑:

error: binary operator '!=' cannot be applied to operands of type 'E' and '_'
  if e != .three {
     ~ ^  ~~~~~~

Swift 5.2 中,将可以立马找到问题原因:

error: type 'E' has no member 'three'
  if e != .three {
          ~^~~~~

Code Completion Improvements

  • 相比 Xcode 11.3.1code completion 速度大概提升了 1.2 倍到 1.6 倍。
  • 现在可以提供隐式成员名字的显示,比如 dictionary 和 三元表达式。

  • 可读性更强了。

比如,当使用了 typealiases 时:

Swift 5.1.3Xcode 11.3.1):

Swift 5.2Xcode 11.4) 中显示的是这样的:

Improved Build Algorithms

Swift 编译器支持两种模式:

  • Whole Module(主要用于 Release 构建)
  • Incremental(主要用于 Debug 构建)

Xcode 中可以看到如下 build 设置:

Incremental 模式往往 build 速度更快些(只重新编译需要的文件)。相反,Whole Module 模式会更耗时些(可以做到最大性能优化)。

Debugger Improvements

在所有 Swift debugging 支持的平台中,LLDBdebug 方面是更灵活些的,能够显示更多的 debug 信息。

Swift Package Manager

Swift 5.2 中的 Swift Package Manager 包含如下新的提升:

  • 5.2 及以上版本的远程 Swift packages 工具将不再解决包的依赖(这些依赖只用于 test targets),来提升性能,并降低依赖版本之间冲突的可能性。
  • Swift Package Manager 使用了一种新策略来解决包的依赖,这大大改善了错误提示和性能。

SwiftSyntax Updates

SwiftSyntax API 已经被优化过了。当重写了 SyntaxRewriter 后,tree visitation 变的更快了,提升了性能。

Language Server Protocol Updates

Swift 5.2 也升级了 SourceKit-LSP language server。

SourceKit-LSP 现在支持了如下特性:

  • FixIts
  • Local Refactoring

同时,SourceKit-LSP 也做了很多其它优化,来支持 C/C++/Objective-C 代码。

Swift 5.3 规划

除了常规的性能优化外,Swift 5.3 还将支持更多的平台,比如 Windows 和 其它 Linux 发行版。(注:当前官方只支持 macOSUbuntu

发表评论

电子邮件地址不会被公开。 必填项已用*标注