Swift 周报 第二期

周报仓库:https://github.com/SwiftCommunityRes

前言

California streaming. 我们都知道这意味着什么:马上将迎来重要的一天 —— Apple 宣布了 9 月 14 日的活动! 他们在活动邀请中隐藏了一个彩蛋 —— 一种隐藏的 AR 体验,看起来很酷。 这也让全球的粉丝们纷纷猜测 Apple 即将发布的产品。

过去两周 Swift 社区非常活跃。 许多提案正在 Swift 迭代中产生,有些已经同意或拒绝,有些仍在审查中。 这些提议有助于促进 Swift 保持现代语言的地位,所以让我们继续努力吧!

新闻和社区

John Sundell 写了一篇文章解释 Swift 表达式中的条件编译

Gabriel Theodoropoulos 写了一篇博文解释了如何在 Swift 中使用可变参数

Commits 和 pull requests

Doug Gregor 合并了一个 pull request,该请求添加了一个选项来构建并发库以进行后端部署

FW 合并了一个为 Swift 实现语义高亮pull request

同意的提案

SE-0321 Package Registry Service - Publish Endpoint 已被接受

SE-0304 Structured Concurrency 第四次审查被接受

拒绝的提案

SE-0320 已返回进行修订

审查的反馈是积极的,社区成员建议作者和核心团队认为可以采用以下几项改进:

  1. CodingKeyRepresentable 中添加 StringInt 的一致性,这将允许在 CodingKeyRepresentable 用作通用约束时主动使用 StringInt 键。
  2. 使 CodingKeyRepresentable 协议的初始化通用。
  3. RawRepresentable 的一致性提供默认实现(带有 StringInt 原始值)。
  4. 使内部 _DictionaryCodingKey 的初始值设定项 non-failable。

正在审查的提案

SE-0320:允许将非 String / Int 键值 Dictionary 编码到 KeyedContainer 中 正在接受第二次审查

  • 第二次审查的重点是社区在第一次审查期间提出的改进建议,并通过 swift-evolution#1435 进行讨论。

SE-0292:Package Registry Service 修正正在审查中

SE-0303:包管理器可扩展构建工具修正正在审查中

SE-0322:正在审查临时未初始化缓冲区

  • 该提案引入了新的标准库功能,用于操作临时缓冲区,这些缓冲区优先分配给堆栈,而不是堆。
  • Swift-evolution 线程:[Pitch] 临时未初始化缓冲区

Swift 论坛

Michael Verges 提出了在 Swift 中添加可选 throws 的提案

  • 在许多情况下,错误处理的权限不明确。开发者可能会质疑是处理还是传播错误。
  • 选择抛出错误可以让调用者灵活地处理问题。
  • 选择不抛出错误是为用户提供了简化语法(没有 do-try-catch)。

Karl 向社区通报了 WebURL 0.2.0 版。

  • 我正准备发布 WebURL 0.2.0 版本 。 这将是一个非常重要的版本,包括用于与 System.frameworkswift-system 包集成的 WebURLSystemExtras 模块,并使项目与 URL 标准的最新版本保持一致。

Patrick Goley 提出了添加结构和类的析构赋值的建议。

  • 析构赋值是一项语言功能,允许你提取值的多个部分,并将其分配给单个赋值语句中的多个变量。

Steve Canon 宣布 Swift Numerics 的第一个稳定版本现已发布。

Austin 开始讨论 SwiftNIO 中的 netlink 套接字支持

Konrad ktoso Malawski 提出了一项实施 Distributed Actors 的提案。

  • 随着最近 Swift 并发的引入,特别是该语言的参与者,Swift 在表达线程安全的并发程序方面获得了强大的基础构建。该提案旨在通过引入分布式参与者和与他们相关的位置透明度,扩大 Swift的参与者在分布式系统方面同样出色的工作能力。

Max Desiatov 告诉我们 SwiftWasm 5.4.0 已经发布。

  • 此版本与 upstream Swift 5.4 匹配,并允许您将 Swift 应用程序(只要它们不使用特定于其他平台的代码)编译到 WebAssembly,甚至可以在浏览器中运行。

elsh 提出了添加模块别名支持的建议。

随着 Swift 库和软件包分布更加广泛,模块名称有时会发生冲突。由于 Swift 中还没有模块命名空间,在这种情况下,库经常被迫重命名或固定在旧的非冲突版本上。这使得以下用例具有挑战性:

  • 添加新的依赖项或升级,因为它可能会引入冲突:一个新的(或升级的)模块可以与依赖关系图中已经存在的另一个模块具有相同的名称。模块名称 Logging 是一个常见示例。

  • 从上游库固定的旧版本升级到软件包的更新版本:考虑这样一个场景,其中 MyApp 依赖于模块 Lib,而 Lib 依赖于模块 LoggingMyApp 还依赖于 Logging。 如果 Lib 固定到 Logging 1.0.0,则 MyApp 会停留在同一版本 1.0.0

2021年9月3日,服务器工作组的 Swift 宣布了一项特别更新

Isabel Lima 向我们更新了有关添加 Property Wrappers 共享存储的状态。

  • Swift 是一种允许我们编写富有表现力的 API 接口语言。通过约束泛型方法重载尾随闭包默认参数等功能,您可以在实现相当灵活的 API的同时减少代码重复。本提案旨在使用 @expanded(函数参数的新属性)增加语言的这一部分。

John Holdsworth 提议引入 Unwrap 或 Throw 运算符

  • 该提议是之前 [Pitch] Introducing the “Unwrap or Die” operator to the standard library 以及最近 Moving toward deprecating force unwrap from Swift? 两个有争议提议的延伸。 后一个提议除了被锁定之外没有得出结论,这个提议在前一个提议上取而代之,建议使用 “Unwrap or Throw” 运算符可能是解决 Swift 中强制解包问题的更好解决方案,这让我很疑惑,我相信当用户的应用程序崩溃时,会影响到用户使用。

  • 总之,我想提出一个 !! 运算符,强制打开和 nil 并之间的交叉,如果可选是 nil,则抛出。

    前言

California streaming. 我们都知道这意味着什么:马上将迎来重要的一天 —— Apple 宣布了 9 月 14 日的活动! 他们在活动邀请中隐藏了一个彩蛋 —— 一种隐藏的 AR 体验,看起来很酷。 这也让全球的粉丝们纷纷猜测 Apple 即将发布的产品。

过去两周 Swift 社区非常活跃。 许多提案正在 Swift 迭代中产生,有些已经同意或拒绝,有些仍在审查中。 这些提议有助于促进 Swift 保持现代语言的地位,所以让我们继续努力吧!

新闻和社区

John Sundell 写了一篇文章解释 Swift 表达式中的条件编译

Gabriel Theodoropoulos 写了一篇博文解释了如何在 Swift 中使用可变参数

Commits 和 pull requests

Doug Gregor 合并了一个 pull request,该请求添加了一个选项来构建并发库以进行后端部署

FW 合并了一个为 Swift 实现语义高亮pull request

同意的提案

SE-0321 Package Registry Service - Publish Endpoint 已被接受

SE-0304 Structured Concurrency 第四次审查被接受

拒绝的提案

SE-0320 已返回进行修订

审查的反馈是积极的,社区成员建议作者和核心团队认为可以采用以下几项改进:

  1. CodingKeyRepresentable 中添加 StringInt 的一致性,这将允许在 CodingKeyRepresentable 用作通用约束时主动使用 StringInt 键。
  2. 使 CodingKeyRepresentable 协议的初始化通用。
  3. RawRepresentable 的一致性提供默认实现(带有 StringInt 原始值)。
  4. 使内部 _DictionaryCodingKey 的初始值设定项 non-failable。

正在审查的提案

SE-0320:允许将非 String / Int 键值 Dictionary 编码到 KeyedContainer 中 正在接受第二次审查

  • 第二次审查的重点是社区在第一次审查期间提出的改进建议,并通过 swift-evolution#1435 进行讨论。

SE-0292:Package Registry Service 修正正在审查中

SE-0303:包管理器可扩展构建工具修正正在审查中

SE-0322:正在审查临时未初始化缓冲区

  • 该提案引入了新的标准库功能,用于操作临时缓冲区,这些缓冲区优先分配给堆栈,而不是堆。
  • Swift-evolution 线程:[Pitch] 临时未初始化缓冲区

Swift 论坛

Michael Verges 提出了在 Swift 中添加可选 throws 的提案

  • 在许多情况下,错误处理的权限不明确。开发者可能会质疑是处理还是传播错误。
  • 选择抛出错误可以让调用者灵活地处理问题。
  • 选择不抛出错误是为用户提供了简化语法(没有 do-try-catch)。

Karl 向社区通报了 WebURL 0.2.0 版。

  • 我正准备发布 WebURL 0.2.0 版本 。 这将是一个非常重要的版本,包括用于与 System.frameworkswift-system 包集成的 WebURLSystemExtras 模块,并使项目与 URL 标准的最新版本保持一致。

Patrick Goley 提出了添加结构和类的析构赋值的建议。

  • 析构赋值是一项语言功能,允许你提取值的多个部分,并将其分配给单个赋值语句中的多个变量。

Steve Canon 宣布 Swift Numerics 的第一个稳定版本现已发布。

Austin 开始讨论 SwiftNIO 中的 netlink 套接字支持

Konrad ktoso Malawski 提出了一项实施 Distributed Actors 的提案。

  • 随着最近 Swift 并发的引入,特别是该语言的参与者,Swift 在表达线程安全的并发程序方面获得了强大的基础构建。该提案旨在通过引入分布式参与者和与他们相关的位置透明度,扩大 Swift的参与者在分布式系统方面同样出色的工作能力。

Max Desiatov 告诉我们 SwiftWasm 5.4.0 已经发布。

  • 此版本与 upstream Swift 5.4 匹配,并允许您将 Swift 应用程序(只要它们不使用特定于其他平台的代码)编译到 WebAssembly,甚至可以在浏览器中运行。

elsh 提出了添加模块别名支持的建议。

随着 Swift 库和软件包分布更加广泛,模块名称有时会发生冲突。由于 Swift 中还没有模块命名空间,在这种情况下,库经常被迫重命名或固定在旧的非冲突版本上。这使得以下用例具有挑战性:

  • 添加新的依赖项或升级,因为它可能会引入冲突:一个新的(或升级的)模块可以与依赖关系图中已经存在的另一个模块具有相同的名称。模块名称 Logging 是一个常见示例。

  • 从上游库固定的旧版本升级到软件包的更新版本:考虑这样一个场景,其中 MyApp 依赖于模块 Lib,而 Lib 依赖于模块 LoggingMyApp 还依赖于 Logging。 如果 Lib 固定到 Logging 1.0.0,则 MyApp 会停留在同一版本 1.0.0

2021年9月3日,服务器工作组的 Swift 宣布了一项特别更新

Isabel Lima 向我们更新了有关添加 Property Wrappers 共享存储的状态。

  • Swift 是一种允许我们编写富有表现力的 API 接口语言。通过约束泛型方法重载尾随闭包默认参数等功能,您可以在实现相当灵活的 API的同时减少代码重复。本提案旨在使用 @expanded(函数参数的新属性)增加语言的这一部分。

John Holdsworth 提议引入 Unwrap 或 Throw 运算符

关于我们

公众号是由 Swift 爱好者共同维护,我们会分享以 Swift 实战、SwiftUI、Swift 基础为核心的技术内容,也整理收集优秀的学习资料。欢迎关注公众号:Swift社区,后台点击进群,联系我们获取更多内容。

Swift社区

感谢 SwiftWeekly 与我们的合作,开启 Swift 周报中文版发布之旅。周报仓库:https://github.com/SwiftCommunityRes

后续还会翻译大量资料到我们公众号,有感兴趣的朋友,可以加入我们,扫码添加微信

fzhanfei

-------------本文结束感谢您的阅读-------------

本文标题:Swift 周报 第二期

文章作者:Swift社区

发布时间:2021年10月22日 - 15:10

最后更新:2021年10月22日 - 15:10

原始链接:https://fanbaoying.github.io/Swift-周报-第二期/

许可协议: 署名-非商业性使用-禁止演绎 4.0 国际 转载请保留原文链接及作者。

坚持原创技术分享,您的支持将鼓励我继续创作!