Swift 5.10 发布


Swift 5.10 现已发布,此版本在并发语言模型中实现了完全的数据隔离。公告称,“这一重要的里程碑经过了多年的积极开发,历经多个版本。”

并发模型是在 Swift 5.5 中引入的,包括async/await、actors 和结构化并发 (structured concurrency)。Swift 5.7 引入了Sendable线程安全类型的基本概念,其值可以在任意并发上下文之间共享,而不会引入数据竞争的风险。现在,在 Swift 5.10 中,当启用完整的并发检查选项时,语言的所有区域都会在编译时强制执行完全数据隔离。

Swift 5.10 中的完全数据隔离为下一个主要版本 Swift 6 奠定了基础。Swift 6.0 编译器将提供新的、可选的 Swift 6 语言模式,该模式将默认强制执行完全数据隔离,项目团队将着手进行过渡消除所有用 Swift 编写的软件之间的数据竞争。

Swift 5.10 会在某些情况下产生数据竞争警告,而在这些情况下,通过额外的编译器分析可以证明代码是安全的。Swift 6 版本的语言开发的一个主要重点是通过减少已证明安全的常见代码模式中的误报并发错误,来提高严格并发检查的可用性。

完全数据隔离

Swift 5.10 完善了语言各个角落的数据竞争安全语义,并修复了Sendable和 actor isolation checking 中的大量错误,以加强完整并发检查的保证。使用编译器 flag-strict-concurrency=complete构建代码时,Swift 5.10 将在编译时诊断数据竞争的可能性,除非使用 explicit unsafe opt-out(例如nonisolated(unsafe)@unchecked Sendable)。

 warning: expression is 'async' but is not marked with 'await'
let model = MyModel.shared
^~~~~~~~~~~~~~
await

解决数据竞争的可能修复方法有:

1) access MyModel.shared asynchronously using await

2) 使MyModel.initMyModel.shared两者都nonisolated,并将需要 main actor 的代码移到单独的隔离方法中,或

3) 将useShared()隔离到@MainActor

可以在 Swift 5.10 发行说明中查看更多详细信息。

Unsafe opt-outs

Swift 5.10 引入了一个新nonisolated(unsafe)keyword,用于 opt out 对存储的属性和变量的 actor isolation checking。nonisolated(unsafe)可用于任何形式的存储,包括存储属性、局部变量和全局/静态变量。

nonisolated(unsafe)还消除了对@unchecked Sendablewrapper types 的需要,这些类型仅用于在不存在并发访问可能性时跨隔离边界传递非Sendable值的特定实例:

// 'MutableData' is not 'Sendable'
class MutableData { ... }

func processData(_: MutableData) async { ... }

@MainActor func send() async {
nonisolated(unsafe) let data = MutableData()
await processData(data)
}

Swift 6 之前的语言演变

Swift 的下一个版本将是 Swift 6。鉴于 Swift 5.10 中的完整并发模型限制过多,团队目前正在积极开发几项 Swift Evolution 提议,以通过消除误报数据竞争错误来提高完整数据隔离的可用性。

这项工作包括:当编译器确定没有并发访问的可能性时,取消对跨隔离边界传递 non-Sendable值的限制;为 functions 和 key-paths 提供更有效的Sendable inference 等。可以在 Swift.org/swift-evolution 上找到将完善 Swift 6 的提案集。

更多详情可查看官方博客。


相關推薦

2024-07-25

Socket.D 协议? Socket.D 是一个基于事件和语义消息流的网络应用协议。在微服务、移动应用、物联网等场景,可替代 http、websocket 等。协议详情参考《官网介绍》。 支持: tcp, udp, ws, kcp 传输。 目前:java,kotlin,javascript

2023-10-17

【源创会预告】1024 程序员节(的前两天),相约开源PHP办公室,我们一起聊 AI!>>> Solon 是什么框架? Java 生态级应用开发框架。从零开始构建,有自己的标准规范与开放生态(历时五年,具备全球第二级别的生态规模)。与

2023-04-01

Swift 5.8 已经正式发布了! 这个版本包括改进开发者体验,改进 Swift 生态中的工具,包括 Swift-DocC、Swift Package Manager 和 SwiftSyntax,完善Windows 支持 等等。 开发者体验 改进的 Result Builder 实现 在 Swift 5.8 中对 Result Builder 的实现进

2022-12-16

这个全新的 Foundation 框架将于 2023 年开源,并在 GitHub 上发布。

2023-05-04

善 Swift 的跨平台开发。近日,基于 Swift 重写的 Foundation 发布了首个 Preview 预览版。 Foundation 框架是苹果 macOS 和 iOS 的基础组件支持核心,几乎所有的 Swift 项目都使用 Foundation 框架,其主要包含了大量常用的 API,为许多基本

2022-02-08

近日 Swift 社区发布公告,为了进一步提供 Swift 和 C++ 之间的互操性支持,他们成立了 Swift 和 C++ 互操性工作组,以作为 Swift 项目的一部分。这个新的工作组的职责就是负责开发和设计 C++ 和苹果开发的 Swift 之间的互操作性模型

2022-11-25

wift 团队的一名工程师兼语言工作组成员 John McCall 在最新发布的一篇博客中介绍了 Swift 的 2023 年度计划。 “Swift 项目中有很多激动人心的工作正在进行,而且很难跟踪所有这些工作,因为它发生在许多不同的存储库、拉取请求

2022-09-13

Swift 5.7 现已发布,该版本包括对语言和标准库的主要添加、对编译器的增强以提供更好的开发人员体验、对 Swift 生态系统中的工具(包括 SourceKit-LSP 和 Swift 包管理器)的改进、改进的 Windows 支持等等。 语言和标准库 Swift 5.7

2023-08-23

近期取得的社区成就,并提出未来一年的工作重点。最新发布的“SSWG 2023 年度更新”公告指出,其 2023 年的工作重点将聚焦于“持续关注生态系统发展、采用结构化并发、扩充文档和指南、以及改进工具”等方面。 持续关注

2022-02-23

Swift 官方公告宣布,核心团队目前正在研究重组项目的领导层,以允许更多的社区成员积极参与该项目的管理。并证实了 Swift 之父、LLVM 项目创始人 Chris Lattner 将离开核心团队。Chris Lattner 早在 2010 年在苹果公司工作期间就已

2024-08-01

苹果公司发布了新的开源 Swift 工具库,以便开发者使用 Swift 实现同态加密 (swift-homomorphic-encryption),此举标志着苹果在数据隐私保护方面迈出了重要一步。 开发文档:https://developer.apple.com/documentation/sms_and_call_reporting/getting_up-

2022-06-12

AppCode 2022.2 EAP3 现已发布,具体更新内容如下: 与 Objective-C 的并发互操作性 Swift 语言带有一组并发特性,包括异步函数和 actors。Objective-C 语言没有它们,因此异步 API 是通过使用 completion handlers 手动表达的。由于 Swift 和 Object

2023-10-20

Rust 和 JavaScript 的使用量正在持续增长。与此同时,Swift 和 Zig 的采用率也都在显着增加。 开发人员对 Zig、Kotlin 和 C# 语言的使用渴望超过了当前的使用率。 WebAssembly 仍然最常用于 Web 应用程序开发,但 Serverless 的使用率

2024-07-18

苹果公司推出,最新迭代版本 Swift 6 计划于今年晚些时候发布,并将进行多项改进。包括更安全、更简单的编程,新的编码时数据安全保障功能,可以在编码时诊断开发者项目中并发访问内存的情况。这一优化可以在对整个代码