page contents

Swift 5.6 正式发布,新功能一览

Swift 5.6 现已正式发布!新版本包括了很多对类型系统的增强,改进了与指针的交互,并增加了使用包管理器运行新插件命令的能力。

attachments-2022-03-K3DFMvJl6232cc8288ced.png

Swift 5.6 现已正式发布!新版本包括了很多对类型系统的增强,改进了与指针的交互,并增加了使用包管理器运行新插件命令的能力。

语言和标准库
新功能和改进

Swift Evolution 提议在Swift 5.6 中得以实现,包括:

  • SE-0290 - 不可用条件
  • SE-0302 - Sendable和@Sendable封闭
  • SE-0315 - 类型占位符(以前称为“占位符类型”)
  • SE-0320 - 允许将非String/Int键入Dictionary的编码KeyedContainer
  • SE-0322 - 临时未初始化的缓冲区
  • SE-0324 - 放宽 C 函数指针参数的诊断
  • SE-0331 - 从不安全的指针类型中删除可发送一致性
  • SE-0335 - 引入 existential 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,而无需显式转换。

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

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

改进的并发安全模型

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

  • Sendable和@Sendable关闭 ( SE-0302 )
  • 增量迁移到并发检查 ( SE-0337 )

生态系统
Swift 包管理器

Swift 5.6 中Swift 包管理器在可扩展性、安全性、性能和可靠性都得到了更新。

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

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

命令插件 ( SE-0332 )

扩展 SE-0303 首次引入的 SwiftPM 插件支持,允许定义自定义命令插件,用户可以直接从 SwiftPM CLI 或支持 Swift 包的 IDE 调用插件。

其他更新包括:

  • SE-0305:包管理器二进制目标改进
  • 针对仅包含主要和次要版本标识符的 Git 标记名称来解析语义版本依赖关系。具有 XY 形式的标签将被视为 XY0,提高了与现有存储库的兼容性。
  • 为了提高包的安全性,SwiftPM 执行首次使用时的信任 (TOFU) 验证。当第一次从 Git 存储库下载包时,会记录包的指纹。后续下载的指纹必须与之前记录的值匹配,否则会根据设置导致构建警告或失败。
  • 针对依赖关系解析基础设施进行多项改进,从而提高依赖关系解析的性能和可靠性

更多相关技术内容咨询欢迎前往并持续关注六星社区了解详情。

如果你想用Python开辟副业赚钱,但不熟悉爬虫与反爬虫技术,没有接单途径,也缺乏兼职经验
关注下方微信公众号:Python编程学习圈,获取价值999元全套Python入门到进阶的学习资料以及教程,还有Python技术交流群一起交流学习哦。

attachments-2022-06-2QQFyfpv62b3be7d41330.jpeg

  • 发表于 2022-03-17 13:52
  • 阅读 ( 625 )
  • 分类:行业资讯

你可能感兴趣的文章

相关问题

0 条评论

请先 登录 后评论
轩辕小不懂
轩辕小不懂

2403 篇文章

作家榜 »

  1. 轩辕小不懂 2403 文章
  2. 小柒 1474 文章
  3. Pack 1135 文章
  4. Nen 576 文章
  5. 王昭君 209 文章
  6. 文双 71 文章
  7. 小威 64 文章
  8. Cara 36 文章