Swift 5.1版本的新功能介绍

507 阅读3分钟

Swift 5.1 现已正式发布!

Swift 5.1以Swift 5的优势为基础,通过引入模块稳定性,将语言的稳定功能扩展到编译时。 有了模块稳定性,现在可以创建和分享二进制框架,这些框架将与未来的Swift版本一起使用。 Swift 5.1还通过属性包装器、不透明结果类型、关键路径成员查询、适当集合类型的差异化以及String的新API等新功能扩展了语言和标准库的能力。 总的来说,Swift 5.1的新特性使得设计更好的API变得更加容易,并减少了常见的模板代码的数量。

你可以在Doug Gregor的Swift Unwrapped播客第79集中了解更多关于5.1版本的设计考虑。 你也可以在Paul Hudson制作的这个操场上尝试一些新功能。

模块的稳定性

Swift 5.1使创建二进制框架成为可能,这些框架可以利用语言对模块稳定性的新增支持与他人共享。 模块稳定性定义了一个新的基于文本的模块接口文件,描述了二进制框架的API,使其能够与使用不同版本的编译器的代码一起编译。

该版本还包括支持库进化的功能。关于语言的这一新增功能的更多信息,请参考Swift Evolution的库进化建议。

以下博文和视频提供了涉及 ABI 稳定性、模块稳定性和库进化工作的更多细节:

标准库更新

Swift 5.1中的标准库包括以下新功能:

  • 支持在适当类型的集合上处理和更新差异
  • 增加初始化数组的灵活性
  • 额外的API,使其更容易处理字符串,包括创建和处理连续的字符串,处理Unicode文本的助手,以及String.Index和Range的通用初始化器
  • 用于处理SIMD类型的各种渐进式API改进,包括支持扩展向量、还原和向量swizzles
  • 用于支持需要唯一标识符的实体的可识别协议

额外的语言和编译器更新

Swift 5.1 包括以下新的语言特性:

  • 属性包装器为定义属性值的自定义访问模式引入了一致的通用语法,包括(但不限于)延迟初始化器、原子操作、线程特定存储和写时复制行为。
  • 不透明的结果类型允许使用通用类型来支持符合相同协议的不同类型,或在API中隐藏实现细节
  • return 关键字对于单一表达式函数或获取器来说是不必要的
  • Self 现在可以用于类和值类型
  • 编译器现在可以为具有默认初始化器的属性合成默认值

SwiftSyntax 更新

SwiftSyntax已被重新架构,重点是通过直接使用 Swift 编译器的解析器来大幅提高其性能。 此外,通过重新构建内部数据结构,使其更加高效,语法树访问和相关操作的性能也得到了改善。

语言服务器协议

用于 macOS 和 Ubuntu 的 Swift 5.1 OSS 工具链包包括SourceKit-LSP 的二进制文件,这是语言服务器协议(LSP)在 Swift 和基于 C 的语言中的实现。

迁移到 Swift 5.1

Swift 5.1 与 Swift 5 的源代码兼容,并支持 Swift 4.2 和 Swift 4/4.1 的兼容模式。

为了帮助从Swift 4/4.2迁移到Swift 5语言模式,苹果的Xcode 11包含一个代码迁移器,可以自动处理许多需要的源码变化。还有一个迁移指南,可以指导你完成许多变化--特别是通过那些不那么机械的,需要更直接的审查。