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 泛型宣言 中设定的目标。以下与泛型相关的提案已在此版本中实现
- SE-0143 条件一致性
- SE-0157 支持关联类型上的递归约束
- SE-0185 合成 Equatable 和 Hashable 一致性
- SE-0187 引入 Sequence.compactMap(_:)
- SE-0188 使标准库索引类型可哈希
- SE-0191 从 Collection 中移除 IndexDistance
有关 Swift 4.1 中条件一致性方面取得的更多进展,请查看这篇博客文章。
构建改进
此版本提供了更多配置构建的方法,包括新的代码大小优化以及更轻松地指定目标环境和平台支持的方法。
代码大小优化模式
编译器现在支持一种新的优化模式,该模式启用专门的优化以减小代码大小。
这在之前的这篇博客文章中已经详细讨论过。
构建导入测试
canImport() 平台条件的参数是一个模块的名称,该模块可能并非在所有平台上都存在。此条件测试是否可以导入该模块,但实际上并未导入它。如果模块存在,则平台条件返回 true;否则,它返回 false。
更多信息请参阅:SE-0075 添加构建配置导入测试 和条件编译块文档。
目标环境条件
当为模拟器编译代码时,targetEnvironment(simulator) 平台条件返回 true;否则,它返回 false。
更多信息请参阅:SE-0190 目标环境平台条件 和条件编译块文档。
Foundation
JSONEncoder 和 JSONDecoder 类现在支持在编码和解码期间转换键的新策略。
这在这篇 论坛帖子 中有更详细的讨论。
其他更新
这些是在此版本中实现的其他 Swift 演进提案
- SE-0184 Unsafe[Mutable][Raw][Buffer]Pointer:添加缺失的方法,调整现有标签以提高清晰度,并移除释放大小
- SE-0186 移除协议中所有权关键字支持
- SE-0189 限制跨模块结构体初始化器
- SE-0198 Playground QuickLook API 改进
ABI 稳定性
Swift 4.1 包含许多幕后更改,这些更改是 Swift 5 中稳定 ABI 工作的一部分。以下是在此版本中完成的任务列表
- 在原生对象头中使用字长字段进行引用计数 (SR-4353)
- 审查通过见证表与枚举鉴别符交互的效率 (SR-4332)
- 确定存在类型元数据的布局,包括协议描述符 (SR-4341)
- 为与顺序无关的名称修饰定义泛型和协议要求的规范化 (SR-3733)
- 审查每个运行时函数的期望性和行为 (SR-3735)
- 对
Sequence和Collection强制执行适当的约束 (SR-3453) - 使用条件一致性折叠各种集合包装器 (SR-3458)
有关 Swift ABI 稳定性的进展的更多信息,请查看 ABI 仪表板。
Package Manager 增强
Swift 4.1 中 Swift Package Manager 有一些增强功能
Swift Package Manager 现在可以正确解析包图中使用不同 URL 方案(例如 ssh 和 http)的依赖项。对于具有共享依赖项的包图,性能得到了显著提升。
迁移到 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
- swift-llvm
- swift-clang
- swift-lldb
- swift-cmark
- swift-corelibs-foundation
- swift-corelibs-libdispatch
- swift-corelibs-xctest
- swift-llbuild
- swift-package-manager
- swift-xcode-playground-support
- swift-compiler-rt
标签 swift-4.1-RELEASE 指定了构成 Swift 4.1 最终版本的这些仓库中的特定修订版本。
swift-4.1-branch 分支将保持开放,但根据相同的发布管理流程,以累积更改,用于潜在的未来错误修复“点”版本。