周报仓库: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 第四次审查被接受。
拒绝的提案
审查的反馈是积极的,社区成员建议作者和核心团队认为可以采用以下几项改进:
- 在
CodingKeyRepresentable
中添加String
和Int
的一致性,这将允许在CodingKeyRepresentable
用作通用约束时主动使用String
和Int
键。 - 使
CodingKeyRepresentable
协议的初始化通用。 - 为
RawRepresentable
的一致性提供默认实现(带有String
和Int
原始值)。 - 使内部
_DictionaryCodingKey
的初始值设定项 non-failable。
正在审查的提案
SE-0320:允许将非 String
/ Int
键值 Dictionary
编码到 KeyedContainer
中 正在接受第二次审查。
- 第二次审查的重点是社区在第一次审查期间提出的改进建议,并通过 swift-evolution#1435 进行讨论。
SE-0292:Package Registry Service 修正正在审查中。
- 该提案引入了新的标准库功能,用于操作临时缓冲区,这些缓冲区优先分配给堆栈,而不是堆。
Swift-evolution
线程:[Pitch] 临时未初始化缓冲区
Swift 论坛
Michael Verges 提出了在 Swift 中添加可选 throws
的提案。
- 在许多情况下,错误处理的权限不明确。开发者可能会质疑是处理还是传播错误。
- 选择抛出错误可以让调用者灵活地处理问题。
- 选择不抛出错误是为用户提供了简化语法(没有
do-try-catch
)。
- 我正准备发布
WebURL 0.2.0
版本 。 这将是一个非常重要的版本,包括用于与System.framework
和swift-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
,甚至可以在浏览器中运行。
随着 Swift
库和软件包分布更加广泛,模块名称有时会发生冲突。由于 Swift
中还没有模块命名空间,在这种情况下,库经常被迫重命名或固定在旧的非冲突版本上。这使得以下用例具有挑战性:
添加新的依赖项或升级,因为它可能会引入冲突:一个新的(或升级的)模块可以与依赖关系图中已经存在的另一个模块具有相同的名称。模块名称
Logging
是一个常见示例。从上游库固定的旧版本升级到软件包的更新版本:考虑这样一个场景,其中
MyApp
依赖于模块Lib
,而Lib
依赖于模块Logging
。MyApp
还依赖于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 第四次审查被接受。
拒绝的提案
审查的反馈是积极的,社区成员建议作者和核心团队认为可以采用以下几项改进:
- 在
CodingKeyRepresentable
中添加String
和Int
的一致性,这将允许在CodingKeyRepresentable
用作通用约束时主动使用String
和Int
键。 - 使
CodingKeyRepresentable
协议的初始化通用。 - 为
RawRepresentable
的一致性提供默认实现(带有String
和Int
原始值)。 - 使内部
_DictionaryCodingKey
的初始值设定项 non-failable。
正在审查的提案
SE-0320:允许将非 String
/ Int
键值 Dictionary
编码到 KeyedContainer
中 正在接受第二次审查。
- 第二次审查的重点是社区在第一次审查期间提出的改进建议,并通过 swift-evolution#1435 进行讨论。
SE-0292:Package Registry Service 修正正在审查中。
- 该提案引入了新的标准库功能,用于操作临时缓冲区,这些缓冲区优先分配给堆栈,而不是堆。
Swift-evolution
线程:[Pitch] 临时未初始化缓冲区
Swift 论坛
Michael Verges 提出了在 Swift 中添加可选 throws
的提案。
- 在许多情况下,错误处理的权限不明确。开发者可能会质疑是处理还是传播错误。
- 选择抛出错误可以让调用者灵活地处理问题。
- 选择不抛出错误是为用户提供了简化语法(没有
do-try-catch
)。
- 我正准备发布
WebURL 0.2.0
版本 。 这将是一个非常重要的版本,包括用于与System.framework
和swift-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
,甚至可以在浏览器中运行。
随着 Swift
库和软件包分布更加广泛,模块名称有时会发生冲突。由于 Swift
中还没有模块命名空间,在这种情况下,库经常被迫重命名或固定在旧的非冲突版本上。这使得以下用例具有挑战性:
添加新的依赖项或升级,因为它可能会引入冲突:一个新的(或升级的)模块可以与依赖关系图中已经存在的另一个模块具有相同的名称。模块名称
Logging
是一个常见示例。从上游库固定的旧版本升级到软件包的更新版本:考虑这样一个场景,其中
MyApp
依赖于模块Lib
,而Lib
依赖于模块Logging
。MyApp
还依赖于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
,则抛出。
关于我们
公众号是由 Swift 爱好者共同维护,我们会分享以 Swift 实战、SwiftUI、Swift 基础为核心的技术内容,也整理收集优秀的学习资料。欢迎关注公众号:Swift社区,后台点击进群,联系我们获取更多内容。
感谢 SwiftWeekly 与我们的合作,开启 Swift 周报中文版发布之旅。周报仓库:https://github.com/SwiftCommunityRes
后续还会翻译大量资料到我们公众号,有感兴趣的朋友,可以加入我们,扫码添加微信