苹果开发的通用编程语言 Swift 的最新版本——Swift 6 如今重磅上市!这次的语言更新带来了令人瞩目的并发性改进,其中数据竞赛的安全保证得到了极大扩展。同时,Linux 和 Windows 支持得到增强,与 C++的互操作性也更上一层楼。
9 月 16 日发布的 Swift 6 可从 Swift.org 下载。在语言和标准库方面,全新的可选择加入语言模式能够将代码中潜在的数据竞赛诊断为编译器错误,进一步提升了安全保障。要知道,在 3 月 5 日推出的 Swift 5.10 中,数据竞赛安全检查还只是作为警告出现。此外,Swift 6 凭借改进的 Sendable 推理以及新的编译器分析,能够将可变状态从一个行为者传输到另一个行为者,从而大大减少了 Swift 警告的误报。这个版本还包含了一个用于低级并发 API 的同步库,涵盖了原子操作和互斥 API 等。9 月 17 日的公告指出,Swift 6 中的这些更新标志着让数据竞赛安全变得更加简单的旅程正式开启。
在 Linux 和 Windows 方面,Swift 6 统一了 Foundation 的实现,使得在所有平台上都能轻松访问数据类型、集合和操作系统。自去年推出的 Swift 5.9 以来,MacOS 和 iOS 就一直在使用 Foundation 的 Swift 实现。如今,Swift 6 将这些改进带到了 Windows 和 Linux 平台。对于 Linux,Swift 6 为 Debian、Fedora 以及 Ubuntu 24.04 提供了官方测试和支持,并且还能提供完全静态链接的可执行文件。而对于 Windows,预构建的工具链可用于 arm64 架构,为 Windows on Arm 主机带来了更出色的编译器性能。同样在 Swift 6 中,软件包管理器默认在 Windows 上的多个核心上并行构建,这能让 10 核机器的性能提升高达 10 倍。
Swift 6 还全新引入了 Swift Testing,这是一个专门为 Swift 设计的测试库,其中包括用于编写和组织测试的表达式 API。当使用#expect 等宏测试失败时,会提供极为详细的输出。该库还能扩展到大型代码库,具备参数化等功能,可以使用不同的参数重复测试。同样在 Swift 6 中,提供了一个调试宏,能够通过使用不运行任意代码的格式方案,自定义在 LLDB 中以及在 Xcode 和 VS Code 的变量视图中显示对象的方式。而且,在使用显式模块构建时,调试器的启动性能会大幅提高。
Swift 6 的其他亮点还包括:生产力增强方面,有 count(where)功能,能够简化序列中满足谓词的元素数量的计数;包迭代功能,可用于在值参数包中的元素上编写自然的 for 循环;还有对导入的访问控制,能够防止泄露公共 API 的实现细节。在类型化抛出方面,函数可以指定作为签名一部分抛出的错误类型,这在泛型代码中非常有用,尤其是在转发客户端代码或资源受限环境(如嵌入式 Swift 代码)中无法分配内存时抛出的错误的情况下。对于与 C++的双向互操作性,没有复制构造函数的 C++类型现在可以从 Swift 6 中作为不可复制类型访问,只需使用~Copyable。Swift 5.9 引入的 C++双向互操作性,已经将该语言的使用扩展到了更多现有项目。