Swift 5.8 已经正式发布了! 这个版本包括改进开发者体验,改进 Swift 生态中的工具,包括 Swift-DocC、Swift Package Manager 和 SwiftSyntax,完善Windows 支持 等等。
开发者体验
改进的 Result Builder 实现
在 Swift 5.8 中对 Result Builder 的实现进行了重做,以大幅提高编译时性能、代码补全结果和诊断能力。Swift 5.8 的 Result Builder 实现执行了更严格的类型推理,与 SE-0289: Result Builders 中的语义相符,这对一些依赖无效类型推理的现有代码有影响。
生态
Swift-DocC
正如 2 月宣布的,《Swift 编程语言》一书已被转换为 Swift-DocC,并开源,随之而来的是对 Swift-DocC 本身的一些改进,其形式为 Option 指令,你可以用来改变你生成的文档的行为。Swift-DocC 还增加了一些新的指令来创建更多的动态文档页面,包括基于网格的布局和标签导航器。
为了更进一步,你现在可以通过颜色、字体和定制图标自定义你的文档页面的外观。导航也向前迈进了一步,有了快速导航,可以在项目中进行模糊的搜索:
Swift-DocC 现在还支持记录对其他模块的类型的扩展。这是一个选择性功能,可以在使用 Swift-DocC 插件时添加 -include-extended-types
标志来启用。
Swift Package Manager
以下是 Swift 5.8 中对 Swift Package Manager 引入变化的一些亮点:
- SE-0362:目标现在可以指定他们需要的即将到来的语言功能。
Package.swift
清单语法已通过 API 进行了扩展,包括在目标层设置enableUpcomingFeature
和enableExperimentalFeature
标志。 - SE-0378: 现在支持在与包注册表交互时进行令牌认证。
swift package-registry
命令有两个新的子命令login
和logout
,用于添加/删除注册表凭证。 - 现在允许公开一个仅由二进制目标组成的可执行产品,该目标由一个工件包支持。这允许将二进制可执行文件作为它们自己独立的软件包出售,独立于正在使用它们的插件。
- 在使用 5.8 或更高版本的工具的包中,Foundation 不再被隐式导入包清单中。如果使用 Foundation API,则需要明确导入该模块。
SwiftSyntax
随着 SwiftSyntax 的 Swift 5.8 版本的发布,SwiftSyntax 包含一个完全重新编写的解析器,它完全由 Swift 实现,而不是依靠 C++ 解析器来生成 SwiftSyntax 树。虽然 Swift 编译器仍然使用用 C++ 实现的旧解析器,但最终目标是完全取代旧解析器。新的解析器有很多优点:
- 贡献或依赖 SwiftSyntax 现在就像其他 Swift 包一样容易,这大大降低了新的贡献者和采用者的准入门槛。
- 新的解析器是以错误恢复为主要目标设计的。它对解析错误的容忍度更高,产生的错误信息也更好。
- SwiftSyntaxBuilder 允许使用结果构建器和字符串插值的混合方式,以声明的方式生成源代码。
Windows 平台
Swift 5.8 继续对 Windows 工具链进行增量改进。这个发布周期中的一些重要工作包括:
- Windows 工具链减少了对环境变量的一些依赖。
DEVELOPER_DIR
以前需要用来定位组件,现在不再需要了。这清理了安装程序,使我们能够更接近于按用户安装。 - ICU 已经改为静态链接。这减少了需要分发的文件的数量,并减少了运输产品所需的依赖关系的数量。这是因为在 Swift 标准库中删除了 ICU 的依赖性,才得以实现。
- 支持 Windows 上 C++ 互操作的一些初步工作已被合并,并在工具链中提供。这包括对微软 C++ 运行时(msvcprt)进行模块化的工作。
vcruntime
模块已被重新命名为visualc
。这更好地反映了该模块,并为未来加强与 Windows 平台库的连接铺平了道路。- 改善 Swift 包管理器中的路径处理的大量工作已被合并。这将有助于使 Swift 包管理器在 Windows 上更加强大,并改善与 SourceKit-LSP 的交互。
- SourceKit-LSP 已经受益于一些改进。跨模块引用现在更加可靠,C/C++ 引用也得到了改善,这要归功于 SPM 中增强的路径处理,确保文件被正确识别。
更多详情可查看:https://www.swift.org/blog/swift-5.8-released/