AICon 深圳站 Keynote 嘉宾官宣!共探AI价值转化的实践路径 了解详情
写点什么

Swift 6.2 引入 Approachable Concurrency 以简化并发编程

  • 2025-08-12
    北京
  • 本文字数:1233 字

    阅读完需:约 4 分钟

大小:576.22K时长:03:16
Swift 6.2引入Approachable Concurrency以简化并发编程

在最新的开发者大会 WWDC25 上,Swift 宣布Approachable Concurrency将成为 Swift 6.2 中的一个新特性,旨在简化移动应用中最常见用例的并发编程。

 

启用 Approachable Concurrency 将使 Swift 编译器更加具有可预测性,以减少它生成的错误和警告的数量,这些错误和警告可能会难以解决且不总是与代码的实际问题相关

 

在底层,Approachable Concurrency 引入了两个新的编译器标志:推断隔离遵从性和默认执行 nonisolated(nonsending)

 

第一个特性引入了隔离遵从性( isolated conformance)的概念,它将遵从性限制在与遵从类型相同的隔离域内。例如,假设我们有MyModelType遵从Equatable

@MainActorclass MyModelType: Equatable {...}
复制代码

MyModelType为所有Equatable需求提供了实现,它将被绑定到MyModelType的隔离域,例如@MainActor。然而,遵从性声明没有指定任何隔离域,这意味着MyModelType对编译器来说在任何隔离域上都遵从Equatable。因此,编译器会愉快地编译对MyModelTypeEquatable要求的任意调用,但这会在从不同的 actor 调用时产生运行时错误。对比如下的声明:

@MainActorclass MyModelType: @MainActor Equatable {...
复制代码

 

在这种情况下,遵从性被限制在与实现它的类相同的隔离域内,编译器将检测任何尝试从非主 actor 调用MyModelTypeEquatable方法的尝试。

 

新的推断隔离遵从性特性使程序员无需显式限制对Equatable的遵从性。

 

第二个特性,强制 nonisolated(nonsending),它将确保nonisolated async的异步函数默认在调用 actor 的执行器上运行,而不是在全局执行器上运行。这种新行为统一了非async nonisolated函数的行为。

 

Approachable Concurrency 是与另一个重要的并发相关特性一起引入,即默认使用主 actor。这强制实现了所有函数默认在主 actor 上运行的原则,除非程序员明确指示其他情况。

 

这些新特性受到了许多 Swift 开发者的欢迎,他们发现采用 Swift 6 严格的并发模型打开了一个类似潘多拉盒子的问题,导致许多人怀疑Swift 6并发是否走得太远或太快,在 Swift 论坛上引发了一个漫长但极其有趣的讨论。

 

虽然讨论深入且富有洞察力,但总结一下就是,Swift 可能在语言、生态系统和文档完全准备好之前,过快地将并发推向开发者。对于移动应用来说,它也走得太远了,因为移动应用往往比通用并发软件更简单。在实践中,大多数 iOS 和 iPadOS 应用主要在主线程上运行,只有少数任务被卸载到后台,以保持 UI 的响应性。

 

正如 Donny Wals(多本 Swift 书籍的作者,包括 Practical Swift Concurrenty)所指出的

与 Xcode 26 创建的新项目默认在主 actor 上运行的代码搭配时,你会发现 Approachable Concurrency 确实实现了它的承诺。它消除了某些需要为不存在的问题提供奇怪修复的晦涩编译器错误。

 

Approachable Concurrency 和默认使用主 actor 只是Swift团队官方愿景文件中提到的几个旨在简化并发编程的新特性中的两个,这些特性将在未来 Xcode 26 测试版中逐步发布。

 

原文链接:

 Swift 6.2 Introduces Approachable Concurrency to Simplify Concurrent Programming

2025-08-12 11:211

评论

发布
暂无评论

数字化时代下,智能运维全栈监控解决方案及案例盘点

云智慧AIOps社区

运维 解决方案 场景应用 自动化运维 运维安全

Go HTTP Server 基于OpenTelemetry 使用Jaeger - 代码实操

非晓为骁

Go Docker Trace Jaeger OpenTelemetry

实用机器学习笔记二十五:超参数优化

打工人!

学习笔记 超参数调优 机器学习算法 3月月更

向工程腐化开炮 | Java代码治理

阿里巴巴终端技术

Java android JVM 代码治理

APICloud平台使用融云模块实现音视频通话实践经验总结分享

YonBuilder低代码开发平台

前端开发 APP开发 APICloud 融云 跨端开发

低代码实现探索(三十七)业务的流程,开发的框架

零道云-混合式低代码平台

中国AI的下一站:从两会高地奔涌向产业河谷

脑极体

如何进行数据挖掘?

郑州埃文科技

数据挖掘 数据库

如何使用OKR管理团队?

优秀

【直播回顾】OpenHarmony知识赋能第四期直播——标准系统HDF开发

OpenHarmony开发者

直播 HDF OpenHarmony

【51单片机】室友用一把王者时间,学会了去使用数码管

謓泽

3月月更

Gitlab-ci 替代 webhook 触发Jenkins job

网易云信

gitlab

企业知识管理的目标是什么?

小炮

移动域全链路可观测架构和关键技术

阿里巴巴终端技术

架构 App 移动端 体验优化

基于WEB快速开发平台的轻量ERP

雯雯写代码

ERP 快速开发平台

java培训:SpringBoot高频面试考点分享

@零度

JAVA开发 springboot

云计算及国内主流云厂商概述

穿过生命散发芬芳

3月月更

Jaeger docker部署实操

非晓为骁

Docker Jaeger Go 语言 http client

打造优质的车联网体验,仍需注意数据安全保护

FinClip

WebRTC 简单入门

ZEGO即构

WebRTC 动手实践 音视频开发 即构科技

hexo+github搭建个人博客前期部署工作

静Yu

Hexo

OceanBase 社区版 运维管控平台 OCP 功能解读

OceanBase 数据库

OCP oceanbase OceanBase 开源 OceanBase 社区版

企业内PAAS建设的经验与教训

Crazy

中间件 PaaS 经验 云原生应用

ICASSP 2022 | 前沿音视频成果分享:基于可变形卷积的压缩视频质量增强网络

阿里云CloudImagine

阿里云 计算机视觉 音视频 视频编码 视频云

JavaScript深入理解之闭包

锋享前端

盲盒风潮过后,中国收藏玩具市场该何去何从?

易观分析

盲盒 潮玩

喜讯!openGauss社区入选2021年 “科创中国”榜单

被冰封的 Bug:Fishhook Crash 修复纪实

声网

Dev for Dev fishhook

openGauss社区成立ReleaseManagement SIG

大数据培训:Hadoop和MPP有什么区别

@零度

hadoop MPP 大数据开发

如何从头到脚彻底解决一个MySQL Bug?华为云数据库高级专家带你看

华为云数据库小助手

bug GaussDB 华为云数据库 GaussDB(for MySQL)

Swift 6.2引入Approachable Concurrency以简化并发编程_后端_Sergio De Simone_InfoQ精选文章