Swift 5.6 来啦!!!

👇👇关注后回复 “进群” ,拉你进程序员交流群👇👇

文章来自 swift 官方博客,官宣 Swift 5.6,可点击阅读原文跳转

https://www.swift.org/blog/swift-5.6-released/

Swift 5.6 现已正式发布!

Swift 5.6 包括对类型系统的许多增强,改进了与指针的交互,并增加了使用包管理器运行新插件命令的能力。

要快速了解 Swift 5.6 中的一些新功能,可以查看 Paul Hudson 整理的这个 Playground https://github.com/twostraws/whats-new-in-swift-5-6。

如果您是 Swift 新手,那么 The Swift Programming Language 是有关 Swift 编程语言的权威指南,并且已针对 5.6 版进行了更新。Swift 社区还维护了许多翻译。它也可以在 Apple Books 商店免费获得。

语言和标准库

新功能和改进

Swift 5.6 依据 Swift Evolution 中的一些提议增强了语言能力,包括:

  • SE-0290 - 不可用条件

  • SE-0315 - 类型占位符(以前称为“占位符类型”)

  • SE-0320 - 允许将非 String / Int 键控字典编码到 KeyedContainer

  • SE-0322 - 临时未初始化的缓冲区

  • SE-0324 - 放宽 C 函数指针参数的诊断

  • SE-0331 - 从不安全的指针类型中删除 Sendable 一致性

  • SE-0335 - 引入 any

  • SE-0337 - 增量迁移到并发检查

下面详细介绍一下。

类型系统的增强

类型占位符 (SE-0315)

Swift 允许您使用类型推断从代码中省略冗长的、附带的细节。但是,在需要时编写显式类型可能会让人感觉有点过了,因为您必须指定完整的类型,即使您的代码只需要类型的特定部分来让代码更清晰:

enum Either<Left, Right> {
  case left(Left)
  case right(Right)
}

let either: Either<ClosedRange<Int>, Range<Int>> = .left(0...10)

使用类型占位符,您现在可以在代码中编写部分类型注释以仅提供必要的详细信息。类型占位符用 _ 编写,它指示编译器推断缺少的类型:

enum Either<Left, Right> {
  case left(Left)
  case right(Right)
}

// Inferred as 'Either<ClosedRange<Int>, Range<Int>>'
let either: Either<_, Range<Int>> = .left(0...10)
Existential any (SE-0335)

Swift 中的 Existential 类型用于存储符合特定协议的任何类型的值。Existential 类型使用简单的协议名称或协议组合拼写:

protocol DataSourceObserver { ... }

struct DataSource {
  var observers: [DataSourceObserver] { ... }
}

Existential 类型会擦除其基础类型信息,这在您需要动态更改基础类型时很有用,但它会禁止 Existential 类型具有其他有用的功能,例如符合协议。现有语法令人困惑,因为存在类型看起来就像一个通用的一致性要求,它没有这些基本限制。

在 Swift 5.6 中,Existential 类型可以用 any 关键字显式标记:

protocol DataSourceObserver { ... }

struct DataSource {
  var observers: [any DataSourceObserver] { ... }
}
改进与指针的交互

Swift 5.6 在处理不安全指针时引入了三项重大改进:

临时未初始化缓冲区 (SE-0322)

这引入了一种创建临时未初始化内存空间的新方法,这在与需要提供用于存储计算结果的内存的 C API 交互时特别有用。

放宽 C 函数指针参数的诊断 (SE-0324)

此更改允许将不安全指针的可变变体(例如 UnsafeMutablePointer)传递给采用不可变版本(例如 UnsafePointer)的 API,而无需显式转换。

从不安全的指针类型中删除可发送一致性 (SE-0331)

早期采用 Sendable 的反馈表明,指针一致性具有意想不到的负面后果,尤其是对于隐式一致性,因为这些类型的行为类似于引用。

改进的并发安全模型

Swift 5.6 还包括对并发安全模型的一些改进:

Sendable 和 @Sendable 闭包 (SE-0302)

@Sendable 函数类型等结构类型、由可发送类型(包括 Void)和元类型(如 Any.Type)组成的元组现在符合可发送协议。Task 和 task-local API 现在根据需要定义 Sendable 约束。

增量迁移到并发检查 (SE-0337)

在 Swift 5.6 中默认禁止有关 Sendable 的诊断,但可以通过显式定义对 Sendable 的一致性或使用 -warn-concurrency 编译器标志来启用,从而启用并发检查的增量迁移路径。

生态系统

Swift 包管理器

Swift 包管理器在 Swift 5.6 中获得了可扩展性功能,以及几个重要的安全性、性能和可靠性更新。

可扩展构建工具 (SE-0303)

引入了在 SwiftPM 中定义构建工具插件的能力,允许在构建过程中自动调用自定义工具。构建工具插件专注于构建包期间的代码生成,例如从 .proto 文件或其他输入生成 Swift 源文件,以便允许将构建工具合并到构建图中并自动运行一种安全的方式。

命令插件 (SE-0332)

扩展 SE-0303 首次引入的 SwiftPM 插件支持,以允许定义自定义命令插件——用户可以直接从 SwiftPM CLI 或支持 Swift 包的 IDE 调用的插件,以便对其包执行自定义操作。命令插件指定命令的语义意图——这可能是预定义的意图之一,例如“文档生成”或“源代码格式化”,或者它可能是具有可以传递给 swift 包的专用动词的自定义意图命令。

其他更新包括:

  • SE-0305 - 包管理器二进制目标改进

  • 现在可以针对仅包含主要和次要版本标识符的 Git 标记名称来解析语义版本依赖关系。具有 X.Y 形式的标记将被视为 X.Y.0。这提高了与现有存储库的兼容性。

  • 为了提高包的安全性,SwiftPM 执行首次使用时的信任 (TOFU) 验证。现在,当第一次从 Git 存储库下载包时,会记录包的指纹。后续下载的指纹必须与之前记录的值匹配,否则会根据设置导致构建警告或失败。

  • 对依赖关系解析基础设施的多项改进,从而提高依赖关系解析的性能和可靠性

Swift-DocC 更新

Swift-DocC 现在可以使用新的插件命令支持作为 SwiftPM 插件使用。请参阅文档以了解如何开始。

此外,您现在可以使用 Swift-DocC 将静态内容发布到 GitHub Pages。

其他增强功能包括:

  • docc 命令行工具现在是用于 macOS 和 Linux 平台的开源、发布 Swift 工具链的一部分。

  • Swift-DocC 现在可以构建与静态托管环境兼容的文档,例如 GitHub Pages。

  • Swift-DocC 现在可以为命令行工具和应用程序等可执行目标生成文档。

请务必查看 Joseph Heck 的精彩博客文章 https://rhonabwy.com/2022/01/28/hosting-your-swift-library-docs-on-github-pages/,其中更详细地介绍了这一点。

下载

可从 Swift.org 下载适用于 Xcode、Windows 和 Linux 的官方二进制文件。Swift 5.6 也包含在 Xcode 13.3 中。

我们还为 Amazon Linux 2 和 CentOS 7 提供 RPM,仅供实验使用。请提供您的反馈。

使用以下说明进行 RPM 安装:

Amazon Linux 2

$ curl https://download.swift.org/experimental-use-only/repo/amazonlinux/releases/2/swiftlang.repo > /etc/yum.repos.d/swiftlang.repo
$ amazon-linux-extras install epel
$ yum install swiftlang

CentOS 7

$ curl https://download.swift.org/experimental-use-only/repo/centos/releases/7/swiftlang.repo > /etc/yum.repos.d/swiftlang.repo
$ yum install epel-release
$ yum install swiftlang

-End-

最近有一些小伙伴,让我帮忙找一些 面试题 资料,于是我翻遍了收藏的 5T 资料后,汇总整理出来,可以说是程序员面试必备!所有资料都整理到网盘了,欢迎下载!

435dbfda5ec356f337b17fc7e51ffec0.png

点击👆卡片,关注后回复【面试题】即可获取

在看点这里dba78de2165688620c08b0af2a6c7282.gif好文分享给更多人↓↓

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值