Swift 5.1 已发布!
Swift 5.1 现已正式发布!
Swift 5.1 在 Swift 5 的优势基础上构建,通过引入模块稳定性,将语言的稳定特性扩展到编译时。借助模块稳定性,现在可以创建和共享二进制框架,这些框架可以与 Swift 的未来版本一起使用。Swift 5.1 还通过诸如属性包装器、不透明结果类型、键路径成员查找、适当集合类型的差异化以及 String 的新 API 等新功能扩展了语言和标准库的功能。总而言之,Swift 5.1 的新功能使设计更好的 API 变得更容易,并减少了常见的样板代码量。
您可以在 Doug Gregor 在 Swift Unwrapped 播客的 第 79 集 中了解有关 5.1 版本的设计考虑因素的更多信息。您也可以尝试 Paul Hudson 整理的这个 playground 中的一些新功能。
模块稳定性
Swift 5.1 支持创建二进制框架,这些框架可以与其他人共享,并利用该语言对模块稳定性的新增支持。模块稳定性定义了一个新的基于文本的模块接口文件,该文件描述了二进制框架的 API,使其可以与使用不同编译器版本的代码一起编译。
该版本还包括支持库演进的功能。有关该语言新增功能的更多信息,请参阅 Swift Evolution 提案 库演进。
以下博客文章和视频提供了有关 ABI 稳定性、模块稳定性和库演进的更多详细信息
- ABI 稳定性和更多内容 & ABI 稳定性之后在 Apple 平台上发展 Swift
- Swift 中的二进制框架 (WWDC 2019 会议视频)
- 现代 Swift API 设计 (WWDC 2019 会议视频)
标准库更新
Swift 5.1 中的标准库包括以下新功能
- 支持处理和更新适当类型集合的差异
- 增加初始化数组的灵活性
- 用于更轻松地处理字符串的附加 API,包括创建和处理连续字符串、用于处理 Unicode 文本的助手以及 String.Index 和 Range 的通用初始化器
- 用于处理 SIMD 类型的各种增量 API 改进,包括支持扩展向量、缩减和向量混合
- 用于支持需要唯一标识符的实体的 Identifiable 协议
Swift 5.1 实现了 Swift Evolution 流程中的以下标准库提案
- SE-0240 有序集合差异化
- SE-0245 添加具有访问未初始化存储的数组初始化器
- SE-0247 连续字符串
- SE-0248 字符串间隙和缺失的 API
- SE-0251 SIMD 添加
- SE-0261 Identifiable 协议
其他语言和编译器更新
Swift 5.1 包括以下新的语言功能
- 属性包装器为定义属性值的自定义访问模式引入了一致且通用的语法,包括(但不限于)延迟初始化器、原子操作、线程特定存储和写时复制行为
- 不透明结果类型允许使用泛型类型来支持符合相同协议的不同类型,或隐藏 API 中的实现细节
- 对于单表达式函数或 getter,不再需要
return关键字 - 现在
Self可以用于类和值类型 - 编译器现在为具有默认初始化器的属性合成默认值
Swift 5.1 实现了 Swift Evolution 流程中的以下语言提案
- SE-0068 将 Swift Self 扩展到类成员和值类型
- SE-0242 为成员逐一初始化器合成默认值
- SE-0244 不透明结果类型
- SE-0252 键路径成员查找
- SE-0254 静态和类下标
- SE-0255 来自单表达式函数的隐式返回
- SE-0258 属性包装器
SwiftSyntax 更新
SwiftSyntax 已经过重新架构,重点是通过直接使用 Swift 编译器的解析器来显着提高其性能。此外,通过重新架构内部数据结构以使其更高效,提高了语法树访问和相关操作的性能。
语言服务器协议
适用于 macOS 和 Ubuntu 的 Swift 5.1 OSS 工具链软件包包括 SourceKit-LSP 的二进制文件,它是 Swift 和基于 C 的语言的 语言服务器协议 (LSP) 的实现。
迁移到 Swift 5.1
Swift 5.1 在源代码上与 Swift 5 兼容,并支持 Swift 4.2 和 Swift 4/4.1 的兼容模式。
为了帮助从 Swift 4/4.2 语言模式迁移到 Swift 5,Apple 的 Xcode 11 包含了一个代码迁移工具,可以自动处理许多必要的源代码更改。还有一个迁移指南可供参考,以指导您完成许多更改——特别是那些不太机械且需要更直接审查的更改。
文档
上提供了 Swift 5.1 的更新版本 The Swift Programming Language。它也可以在 Apple Books 商店 免费获取。
平台
Linux
Ubuntu 18.04、Ubuntu 16.04 和 Ubuntu 14.04 的官方二进制文件可供下载。
Apple (Xcode)
为了在 Apple 平台上进行开发,Swift 5.1 作为 Xcode 11 的一部分发布。
工具链也可从 下载。
源代码
Swift 5.1 的开发在 GitHub 上以下仓库的 swift-5.1-branch 分支中进行跟踪
- swift
- swift-clang
- swift-clang-tools-extra
- swift-cmark
- swift-corelibs-foundation
- swift-corelibs-libdispatch
- swift-corelibs-xctest
- swift-libcxx
- swift-llbuild
- swift-lldb
- swift-llvm
- swift-package-manager
- swift-stress-tester
- swift-syntax
- swift-xcode-playground-support
- swift-compiler-rt
- swift-integration-tests
- sourcekit-lsp
- indexstore-db
标签 swift-5.1-RELEASE 指定了构成 Swift 5.1 最终版本的这些仓库中的特定修订版本。
swift-5.1-branch 分支将保持开放,但在相同的发布管理流程下,以累积下一个版本的更改。