前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Swift 周报 第九期

Swift 周报 第九期

作者头像
Swift社区
发布2021-12-20 14:11:11
8520
发布2021-12-20 14:11:11
举报
文章被收录于专栏:Swift社区Swift社区

前言

这一期(200期)将是我最后一期以主要贡献者身份参与项目。我想要感谢开启这个项目的Jesse Squires,以及相信我并接替我继续运营这个项目的Bas Broek。同样我还要感谢所有帮助撰写、审阅或提供内容的贡献者。这确实是一个社区运行的项目。谢谢!

播客

在Sundell 播客 Swift 的第 110 集中[1],Tim Condon与John Sundell一起讨论客户端和服务端 Swift 开发人员如何利用新的内置并发系统,以及分布式和其他即将推出的语言功能如何继续下去让 Swift 在服务器上更加强大。

新闻和社区

六年前,即 2015 年 12 月 3 日,Swift 语言开源[2]了。

Xcode 13.2已经发布了。该版本修改点略显杂乱,但有一些值得注意的Swift 特性[3]

Swift Playgrounds 4 现已推出。[4]Swift Playgrounds 是学习如何编码的最佳和最简单的方法。借助 Swift Playgrounds 4,您可以使用工具直接在 iPad 上构建 iPhone 和 iPad 应用程序,并将它们直接提交到 App Store Connect。

亚马逊网络服务宣布Swift版本的AWS SDK[5]目前可以开发者预览。

Vincent Pradeilles发布了一段关于 Swift 标准库的视频[6]

提交和拉取请求

Alejandro Alonso合并了一个删除 ICU的拉取请求[7]

同意的提案

SE-0331 从不安全的指针类型中删除Sendable已被接受[8]

SE-0332 包管理器命令插件已接受修改[9]

正在审查的提案

SE-0335:介绍存在 any审查[10]

Swift 中的存在类型有一个非常轻量级的拼写:类型上下文中的协议名称意味着存在类型。多年来,这已经通过引起混乱上升到主动危害的程度,导致程序员走上错误的道路,一旦他们遇到值级抽象[11]的基本限制[12],通常需要他们重新编写代码。该提案通过使用 any 明确存在类型的巨大影响。

SE-0336:分布式 actor 隔离的审查[13]

随着最近在语言中引入了actors[14],Swift 获得了用于编写线程安全并发程序的强大而基础的构建器。该提案是一系列通过分布式 actor的概念扩展 Swift 的 actor 运行时的提案中的第一个,让开发人员不仅可以在本地环境中,还可以在分布式环境中利用 actor 模型。

对于分布式参与者,我们承认我们生活的世界越来越多地围绕分布式系统构建,我们应该为开发人员提供更好的工具方便在这些环境中工作。我们的目标是简化和推动 Swift 中分布式系统编程的最新技术,就像我们把利用local actors来并发编程和Swift's structured concurrency方法嵌入到Swift语言中。

该提案侧重于扩展分布式actors的actor隔离和类型检查。

SSWG-0018:MQTTNIO建议是审查[15]

有许多 Swift MQTT 库,但很多都不是建立在 SwiftNIO 之上的。许多只支持一个版本的协议或不提供 WebSocket 或 TLS 连接。MQTTNIO 提供了所有这些。该库最近还新增了新的的 Swift 并发 API。

SE-0327:关于 Actors 和初始化正在接受第二次审查[16]

针对第一次审查 1 的[17]反馈,该提案经历了多次修改,作者总结为:

  1. 与 actor 无关的 actor 初始值设定项现在允许您从 nonisolated 方法中执行通常可以执行的任何操作。作为交换,Swift 会自动拒绝可能不安全的存储属性的访问。这是问题描述和建议的解决方案 3。
  2. Actor 的析构器不能再访问实例的不可发送的存储属性。这是问题描述和建议的解决方案 1
  3. 类型的存储属性的默认值在非隔离上下文中进行评估。这是问题描述和建议的解决方案
  4. 不再需要定义一个 actor 的委托初始化器时候加上 convenience 关键字。这是其委托初始化程序的问题描述和建议规则,仍在 Sendability 部分。

Swift论坛

Evan Wilde 提出了一个建议[18] @unavailableFromAsync属性。

Swift 并发模型允许任务在不同的线程上挂起和恢复。虽然这种行为允许计算资源的更高效用,但有一些令人讨厌的陷阱可能会出现在毫无戒心的程序员身上。一个陷阱是pthread_mutex_t从与持有锁的线程不同的线程解锁的未定义行为。跨暂停点读取和写入线程本地存储也可能导致意外行为,因为操作可能会在不同的线程上恢复。

Tom Doron提出了一个想法[19],即默认情况下在支持的平台上静态链接 Swift 运行时库。

Swift 5.3.1 引入了在 Linux 上静态链接 Swift 运行时库。使用此功能,用户可以 --static-swift-stdlib 在调用 SwiftPM 命令(或长格式 -Xswiftc -static-stdlib)时设置标志,以便将 Swift 运行时库静态链接到程序中。

在某些平台上,例如 Linux,这通常是链接程序的首选方式,因为程序更容易部署到目标服务器或以其他方式共享。

该提案探索了在此类平台上构建可执行程序时使其成为 SwiftPM 的默认行为。

Frederick Kellison-Linn提议[20]重新考虑@escaping可选函数型参数。Kavon Farvardin更新了关于 Actors 和 Initialization的提案[21]

由于提案与第一次审查有很大不同,所以这类似于竞标。下面是所提议的主要功能的非常非正式且不完整的摘要,以及一些指向文档本身的链接以获取更多详细信息:

  1. 与actor 无关的actor 初始值设定项现在允许您从nonisolated方法中执行通常可以执行的任何操作。作为交换,Swift 会自动拒绝对可能不安全的存储属性的访问。这是问题描述 2和建议的解决方案 1。
  2. Actor 的析构器不能再访问实例的不可发送的存储属性。这是问题描述 1和建议的解决方案
  3. 如果类型的隔离与其初始值设定项不兼容,则类型的存储属性不能具有默认值。这是问题描述和建议的解决方案
  4. 不再需要定义一个actor的委托初始化器时候加上convenience关键字。这是其委托初始化程序的问题描述 3和为其委托初始化器提出的规则 2,仍在Sendability部分。

关于我们

Swift社区是由 Swift 爱好者共同维护的公益组织,我们在国内以微信公众号的运营为主,我们会分享以 Swift实战SwiftUlSwift基础为核心的技术内容,也整理收集优秀的学习资料。

特别感谢 Swift社区 编辑部的每一位编辑,感谢大家的辛苦付出,为 Swift社区 提供优质内容,为 Swift 语言的发展贡献自己的力量,排名不分先后:张安宇@微软戴铭@快手展菲@ESP倪瑶@Trip.com杜鑫瑶@新浪韦弦@Gwell张浩@讯飞张星宇@ByteDance郭英东@便利蜂

参考资料

[1]第 110 集: https://www.swiftbysundell.com/podcast/110/

[2]开源: https://www.swift.org/blog/welcome/

[3]Swift 特性: https://developer.apple.com/documentation/xcode-release-notes/xcode-13_2-release-notes#Swift

[4]Swift Playgrounds 4: https://developer.apple.com/news/?id=v868vy6e

[5]Swift版本的AWS SDK: https://t.co/0x27sFTE3p

[6]Swift 标准库: https://www.youtube.com/watch?v=Ii1mDtDr3xo

[7]ICU: https://github.com/apple/swift/pull/40340

[8]删除 Sendable: https://forums.swift.org/t/accepted-se-0331-remove-sendable-conformance-from-unsafe-pointer-types/53979

[9]包管理器命令插件: https://forums.swift.org/t/accepted-with-modifications-se-0332-package-manager-command-plugins/54074

[10]any: https://forums.swift.org/t/se-0335-introduce-existential-any/53934

[11]值级抽象: https://forums.swift.org/t/improving-the-ui-of-generics/22814#heading--limits-of-existentials

[12]限制: https://forums.swift.org/t/improving-the-ui-of-generics/22814#heading--limits-of-existentials

[13]分布式 actor 隔离: https://forums.swift.org/t/se-0336-distributed-actor-isolation/53939

[14]actors: https://github.com/apple/swift-evolution/blob/main/proposals/0306-actors.md

[15]MQTTNIO: https://forums.swift.org/t/sswg-0018-mqttnio-proposal/54004

[16]关于 Actors 和初始化: https://forums.swift.org/t/se-0327-second-review-on-actors-and-initialization/54093

[17]第一次审查: https://forums.swift.org/t/se-0327-on-actors-and-initialization/53053

[18]@unavailableFromAsync 属性: https://forums.swift.org/t/pitch-unavailability-from-asynchronous-contexts/53877

[19]静态链接 Swift: https://forums.swift.org/t/pitch-package-manager-statically-link-swift-runtime-libraries-by-default-on-supported-platforms/53900

[20]可选函数: https://forums.swift.org/t/swift-6-reconsider-escaping-for-optional-function-type-parameters/53932

[21]Actors 和 Initialization: https://forums.swift.org/t/pitch-2-on-actors-and-initialization/53972

本文参与?腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-12-20,如有侵权请联系?cloudcommunity@tencent.com 删除

本文分享自 Swift社区 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与?腾讯云自媒体同步曝光计划? ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
  • 播客
  • 新闻和社区
  • 提交和拉取请求
  • 同意的提案
  • 正在审查的提案
  • Swift论坛
  • 关于我们
    • 参考资料
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
    http://www.vxiaotou.com