Swift 5.7 发布!

Swift 5.7 现已正式发布!Swift 5.7 包括对语言和标准库的主要新增功能,对编译器进行增强以获得更好的开发者体验,对 Swift 生态系统中的工具(包括 SourceKit-LSP 和 Swift Package Manager)进行改进,完善 Windows 支持等等。

Swift 5.7 是 Swift 社区成员无数贡献的结晶。感谢社区中每一个人对 Swift 论坛的讨论、错误报告、拉取请求、教育内容以及更多方面的贡献!

如果您是 Swift 新手,《Swift 编程语言》是官方 Swift 指南,并且已针对 5.7 版本进行了更新。Swift 社区维护了许多译本。它也可以在 Apple Books 商店免费获取。

语言和标准库

Swift 5.7 语言和标准库具有许多改进

这些功能中的大多数在 WWDC22 上进行了讨论,并在之前的博客文章 WWDC22 的 Swift 语言公告中进行了介绍。您还可以在Swift 演进附录中找到语言和标准库 Swift 演进提案的完整列表。

开发者体验

新的泛型实现

除了上述用于处理泛型的语言改进之外,类型检查器的泛型实现已从头开始重写,提高了正确性和性能。

新的实现修复了许多长期存在的错误,主要与处理复杂的同类型需求有关,例如集合的 SubSequence 关联类型的同类型需求,以及使用定义需求 Self.Element == SelfCaseIterable 协议的代码。

新的泛型实现还提高了性能。在协议和关联类型的某些配置中,Swift 5.6 中的类型检查时间会呈指数级增长,但在 Swift 5.7 中现在是线性的。

自动引用计数改进

在 Swift 5.7 中,通过指定新的规则来缩短允许优化时变量的生命周期,ARC 行为变得更加可预测、用户友好和高性能。为了强制执行这些规则,编译器采用了一种新的内部表示,用于跟踪每个变量的词法作用域。这涉及到更新现有的优化并实现一些新的优化。现在,大多数依赖于扩展变量生命周期的常见编程模式都是安全的,而无需程序员显式使用 withExtendedLifetime()。这可以保护您免受难以诊断的生命周期错误的影响,这些错误仅在优化的构建中运行时才会出现。它还允许引入更强大的优化,而不会破坏现有源代码。

代码补全

函数调用参数、变量和全局函数的代码补全现在与 Swift 的类型检查器紧密集成。这使得代码补全可以在模糊代码或有错误的代码中提供更准确的结果。

如果在以下示例中的 + 之后完成补全,代码补全现在会报告 intstring 与周围上下文匹配,从而允许编辑器将这些结果的排名高于 array

func makeIntOrString() -> Int {}
func makeIntOrString() -> String {}

let array = [4, 2]
let int = 42
let string = "Hello World!"
makeIntOrString() +

如果在以下示例中完成缺失的参数,代码补全现在只会建议 secondInt 参数标签,而省略 secondString

func add(_ firstInt: Int, secondInt: Int) {}
func add(_ firstString: String, secondString: String) {}
add(1, )

生态系统

SourceKit-LSP

SourceKit-LSP 收到多项改进,以支持 Swift for Visual Studio Code 扩展的发布。

现在,在更改 Package.swiftcompile_commands.jsoncompile_flags.txt 后,会重新计算编译器参数。这确保了语义功能(例如代码补全或实时问题)在这些更改后继续正常工作。

如果在同一个 Visual Studio Code 工作区中打开多个 SwiftPM 项目,SourceKit-LSP 可以在单个服务器实例中管理它们。在不同 SwiftPM 项目的文件之间切换时,不再需要重启语言服务器,从而减少了文件语义功能变为可用的延迟。

Swift Package Manager

以下 SwiftPM 的 Swift 演进 提案已被接受,并在 Swift 5.7 中实现

分布式 Actor 库

基于 SE-0336:分布式 Actor 隔离,用于在 Swift 中构建分布式系统的 服务器库 已开源。该库提供了一个对等集群 Actor 系统实现,包括集群管理、故障检测以及与服务发现的集成。

Windows 平台

Swift 5.7 对 Windows 支持进行了以下改进

下载

官方二进制文件可从 下载,适用于 Xcode、Windows 和 Linux。Swift 5.7 编译器也包含在 Xcode 14 中。

您还可以安装适用于 Amazon Linux 2 和 CentOS 7 的 RPM,仅供实验使用。请提供您的反馈。使用以下说明进行 RPM 安装

Amazon Linux 2

$ curl https://download.swift.org/experimental-use-only/repo/amazonlinux/releases/2/swiftlang.repo > /etc/yum.repos.d/swiftlang.repo
$ amazon-linux-extras install epel
$ yum install swiftlang

CentOS 7

$ curl https://download.swift.org/experimental-use-only/repo/centos/releases/7/swiftlang.repo > /etc/yum.repos.d/swiftlang.repo
$ yum install epel-release
$ yum install swiftlang

Swift 演进附录

以下语言、标准库和 Swift Package Manager 提案通过 Swift 演进 流程被接受,并在 Swift 5.7 中实现

并发

类型系统增强

字符串处理

指针可用性

Swift Package Manager