近日,Swift 开发项目组的主管 Ted Kremenek 发布了一篇“Swift 5: start your engines”的文章,他表示 Swift 4 更新工作已基本完结,将在今年晚些时候正式发布,同时这也意味着 Swift 5 的开发工作即将展开。

目前 Ted Kremenek 已在 Swift Evolution 中更新了 README.md 文件,其中概述了 Swift 5 的核心内容和重点领域;此外保留了永久的 URL 地址(即时将来修改 README.md 时,也不会变更这个链接)。

下面我们就来看一下 Swift 5 将会有哪些重大变化:

ABI 稳定

ABI 稳定是 Swift 5 的焦点内容。

然而在 Ted Kremenek 领导 Swift 4 开发期间,他曾表示:“ABI(应用程序二进制接口)兼容性的实现一开始是在 Swift 4 设计准则之中的,但在 Swift 4 相关原理被修正之前,将会推迟 ABI 稳定性问题的解决,这样做能够避免 ABI 不稳定的风险。”从 Swift 3 到 Swift 4,又延后到 Swift 5,这次究竟能否实现呢?

Kremenek 表示,ABI 稳定是 Swift 5 发布的要求,ABI 稳定性是语言成熟度的重要转折点,不能再延迟。Swift 5 版本首先将为 Swift Standard Library 提供 ABI 稳定。ABI 稳定将有助于操作系统内置 Swift Standard Library 和 Swift 运行库时,兼容基于 Swift 5 及更高版本构建的应用程序。

此外,重要的目标是完成从 Swift 4 继承,这是完善标准库 ABI 的先决条件:

  • 标准库所需的泛型功能。 Swift 团队将完成标准库实现 ABI 稳定所需要的条件一致性和递归协议要求。
  • API resilience。 Swift 5 中将实现需要支持 API resilience 的基本部分,以便允许库的公共 API 随着时间的推移而保持稳定的 ABI。
  • Memory ownership model。对于系统编程和其他高性能 App (需预测和确定性的性能)来说,Cyclone / Rust 启发的内存保护模型非常有用。当我们开始强制独占访问内存时,这个模型的一部分被引入了 Swift 4。在 Swift 5 中,目标是解决所有权模式,这些都是 ABI 稳定性的关键。

除了 ABI 稳定之外,Swift 模块稳定也是第二目标,但是 Swift 开发团队表示,虽然希望可以支持 Swift 5 ,但是这将是一个延伸目标,可能并不会及时实现。

ABI 稳定和模块稳定主要差异可参考:https://github.com/apple/swift/blob/master/docs/ABIStabilityManifesto.md

其他改进

String 增强

完善 String Manifesto 更多的内容,使得 String 更容易使用且高效。 其中包括为语言和标准库添加新的文本处理功能,以及对正则表达式的语言级的支持。

基础改进

Swift 5 中,预计会对 Foundation API 提出一些有针对性的改进,以进一步推动 Cocoa SDK 在 Swift 中无缝使用的目标。

添加语法

语法变化不会增加语言的表现力,但会增加其复杂性。因此,这种变化必须非常有活力,并将受到额外审查。

为新的并发模型打下基础

此次将为新的并发模式奠定基础,特别是 ABI 稳定的需要。 然而,这并非是 Swift 5 的目标。关键的重点是设计用于创建和使用异步 API 的语言能力,并处理由过多的回调代码引发的问题。