Swift 4.2 发布!
Swift 4.2 现已正式发布!Swift 4.2 基于 Swift 4 的优势构建,提供了更快的编译速度,改进了调试体验,更新了标准库,并趋向于二进制兼容性。
您可以观看 WWDC 2018:Swift 新特性 演示文稿,快速了解其概况,并尝试 Ole Begemann 整理的这个 playground 中的一些新功能。
语言更新
Swift 4.2 是一个主要的语言版本,包含以下通过 Swift 演进过程的语言变更和更新
泛型改进
随着条件一致性支持的完成,Swift 4.2 在实现语言中泛型的愿景方面取得了重大进展。对泛型更好的支持最终减少了代码中所需的样板代码量,并使更多代码可重用。要了解有关条件一致性的更多信息,请参阅
观看 Swift 泛型 WWDC 2018 演示文稿以了解更多详情。
标准库更新
Swift 4.2 中的标准库包含许多新功能,包括对 Hashable 协议的改进以及一组新的统一的随机化函数和协议。
请参阅更多信息:
- SE-0197 向标准库添加 in-place removeAll(where:)
- SE-0199 向 Bool 添加 toggle
- SE-0202 随机统一
- SE-0204 添加 last(where:) 和 lastIndex(where:) 方法
- SE-0206 Hashable 增强
- SE-0207 向 Sequence 添加 allSatisfy 算法
二进制兼容性
Swift 4.2 使该语言更接近稳定的 ABI,为 Swift 的未来版本实现二进制兼容性。访问 ABI 仪表板 以了解有关此工作当前进度的更多详细信息。
其他语言和编译器更新
Swift 4.2 包含许多改进,这些改进对开发者体验有显著影响,包括
- 支持批处理模式编译,从而加快构建速度
- 更改 retain/release 循环的调用约定,以减小代码大小并提高运行时性能
- 使用 -Onone 进行延迟 SIL 反序列化
- 递归元数据支持
- 更紧凑的反射元数据
- 默认参数在调用点内联
- 一些长期存在的 bug 修复,包括 init declname,每个代码块具有多个 case 标签的 switch,泛型初始化器的继承等等
Swift 4.2 还实现了来自 Swift 演进过程的以下语言提案
- SE-0054 废除隐式解包可选类型。阅读有关重新实现的更多详细信息,请点击此处。
- SE-0079 允许使用可选绑定将 self 从弱引用升级为强引用
- SE-0193 跨模块内联和特化
- SE-0194 枚举案例的派生集合
- SE-0195 引入用户定义的“动态成员查找”类型
- SE-0196 编译器诊断指令
- SE-0205 用于不可变值的 withUnsafePointer(to:_:) 和 withUnsafeBytes(of:_:)
- SE-0210 向 MemoryLayout 添加 offset(of:) 方法
- SE-0212 编译器版本指令
包管理器更新
Swift 4.2 为 Swift 包管理器引入了新功能
-
对批处理模式的支持。 Swift 目标现在将使用 Swift 编译器的批处理模式进行编译。
-
自动 Xcode 项目生成。 generate-xcodeproj 有一个新的 –watch 选项来监视文件系统,并在需要时自动重新生成 Xcode 项目。这使用 watchman 工具来监视所需的文件。
-
改进的 scheme 生成逻辑。 改进了 scheme 生成逻辑,并按如下方式生成 scheme
- 一个 scheme 包含根包的所有常规目标和测试目标。
- 每个可执行目标一个 scheme,其中包含其依赖项与可执行目标的依赖项相交的测试目标。
Swift 4.2 还实现了来自 Swift 演进过程的以下包管理器提案
- SE-0201 包管理器本地依赖项。SwiftPM 现在支持使用磁盘上的路径而不是 git URL 声明对包的依赖关系。这需要将包的工具版本更新到 4.2。
- SE-0208 包管理器系统库目标。工具版本 4.2 中的 PackageDescription API 支持一种新的目标类型“系统库目标”,它将当前的系统模块包功能从包级别移至目标级别。
- SE-0209 包管理器 Swift 语言版本 API 更新。工具版本 4.2 的 PackageDescription 清单 API 中的
swiftLanguageVersions属性从整数数组更改为 SwiftVersion 枚举数组。
迁移到 Swift 4.2
Swift 4.2 与 Swift 4、Swift 4.1 和 Swift 3 源码兼容。Swift 4.2 将是最后一个提供与 Swift 3 源码兼容性的版本。
为了帮助从早期版本的 Swift 迁移到 Swift 4.2,Apple 的 Xcode 10 包含一个代码迁移工具,可以自动处理许多需要的源码更改。还有一个 迁移指南 可供参考,指导您完成许多更改,特别是那些不太机械化且需要更直接审查的更改。
文档
上提供了 Swift 4.2 的最新版本 《Swift 编程语言》。它也可以在 Apple Books 商店 中免费获取。
平台
Linux
Ubuntu 18.04、Ubuntu 16.04 和 Ubuntu 14.04 的官方二进制文件可供下载。
Apple (Xcode)
对于 Apple 平台上的开发,Swift 4.2 作为 Xcode 10 的一部分发布。
工具链也可从 下载。
源代码
Swift 4.2 的开发在 GitHub 上以下存储库的 swift-4.2-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-integration-tests
标签 swift-4.2-RELEASE 指定了构成 Swift 4.2 最终版本的那些仓库中的特定修订版本。
swift-4.2-branch 分支将保持开放,但会在相同的发布管理流程下,继续累积更改,以便用于潜在的未来错误修复“点”版本。