Swift 4.1 发布!

Swift 4.1 现已正式发布!它包含了核心语言的更新,包括对泛型更多的支持、新的构建选项,以及对 Swift Package Manager 和 Foundation 的细微增强。在稳定 ABI 方面也取得了重大进展。

Doug Gregor 和 Ben Cohen 最近在 Swift Unwrapped 播客的两部分节目中讨论了许多这些功能。请在此处查看播客:第一部分第二部分

编译器更新

Swift 4.1 是一个次要语言版本。它与 Swift 4.0 源码兼容。它包含以下语言更改和更新,其中大多数都经过了 Swift 演进过程

语言改进

Swift 4.1 为语言添加了更多泛型功能,进一步实现了 Swift 泛型宣言 中设定的目标。以下与泛型相关的提案已在此版本中实现

有关 Swift 4.1 中条件一致性方面取得的更多进展,请查看这篇博客文章

构建改进

此版本提供了更多配置构建的方法,包括新的代码大小优化以及更轻松地指定目标环境和平台支持的方法。

代码大小优化模式

编译器现在支持一种新的优化模式,该模式启用专门的优化以减小代码大小。

这在之前的这篇博客文章中已经详细讨论过。

构建导入测试

canImport() 平台条件的参数是一个模块的名称,该模块可能并非在所有平台上都存在。此条件测试是否可以导入该模块,但实际上并未导入它。如果模块存在,则平台条件返回 true;否则,它返回 false

更多信息请参阅:SE-0075 添加构建配置导入测试 和条件编译块文档

目标环境条件

当为模拟器编译代码时,targetEnvironment(simulator) 平台条件返回 true;否则,它返回 false

更多信息请参阅:SE-0190 目标环境平台条件 和条件编译块文档

Foundation

JSONEncoderJSONDecoder 类现在支持在编码和解码期间转换键的新策略。

这在这篇 论坛帖子 中有更详细的讨论。

其他更新

这些是在此版本中实现的其他 Swift 演进提案

ABI 稳定性

Swift 4.1 包含许多幕后更改,这些更改是 Swift 5 中稳定 ABI 工作的一部分。以下是在此版本中完成的任务列表

有关 Swift ABI 稳定性的进展的更多信息,请查看 ABI 仪表板

Package Manager 增强

Swift 4.1 中 Swift Package Manager 有一些增强功能

Swift Package Manager 现在可以正确解析包图中使用不同 URL 方案(例如 sshhttp)的依赖项。对于具有共享依赖项的包图,性能得到了显著提升。

迁移到 Swift 4.1

Swift 4.1 与 Swift 4.0 源码兼容。为了帮助从早期版本的 Swift 迁移到 Swift 4.1,Apple 的 Xcode 9.3 包含了一个代码迁移工具,可以自动处理许多必要的源码更改。还有一个迁移指南可供参考,指导您完成许多更改——特别是那些不太机械化且需要更直接审查的更改。

文档

上现已提供 Swift 4.1 的更新版本 The Swift Programming Language 。它也可以在 Apple iBooks 商店免费获取。

平台

Linux (Ubuntu 14.04、Ubuntu 16.04 和 Ubuntu 16.10)

Ubuntu 14.04、Ubuntu 16.04 和 Ubuntu 16.10 的官方二进制文件可供下载

Apple (Xcode)

对于在 Apple 平台上进行开发,Swift 4.1 作为 Xcode 9.3 的一部分发布。

来源

Swift 4.1 的开发在 GitHub 上以下仓库的 swift-4.1-branch 分支中进行跟踪

标签 swift-4.1-RELEASE 指定了构成 Swift 4.1 最终版本的这些仓库中的特定修订版本。

swift-4.1-branch 分支将保持开放,但根据相同的发布管理流程,以累积更改,用于潜在的未来错误修复“点”版本。