写点什么

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:213918

评论

发布
暂无评论

王者荣耀商城异地多活架构设计

smile

面试突击37:线程安全问题的解决方案有哪些?

王磊

Java java面试

架构实战训练营模块七

刘帅

模块二

ASCE

虎符交易所Hoo研究院|关于跨链(上)——Cosmos

区块链前沿News

虎符交易所

[Day7]-[动态规划] 最大子数组和

方勇(gopher)

LeetCode 动态规划 数据结构与算法、

王者荣耀商城异地多活架构设计

张逃逃

王者荣耀商城异地多活架构设计

风中奇缘

架构实战营 「架构实战营」

建木持续集成平台v2.2.5发布

Jianmu

开源 持续集成 开发运维 建木CI

最全讲解:GPU技术架构知识

Finovy Cloud

人工智能 GPU服务器 GPU算力

Flink on K8s 在京东的持续优化实践

Apache Flink

大数据 flink 编程 流计算 实时计算

Flink 在 B 站的多元化探索与实践

Apache Flink

大数据 flink 编程 流计算 实时计算

在线OPML压缩工具

入门小站

工具

TDesign 更新周报(2022年4月第1周)

TDesign

在线XML转CSV工具

入门小站

工具

【模块七】王者荣耀商城异地多活架构设计

yhjhero

架构训练营

怒肝 JavaScript 数据结构 — 栈篇(一)

杨成功

JavaScript 数据结构 4月月更

浅谈电商网站开发中用户会话管理机制的设计和实现原理

汪子熙

JavaScript 电商 用户管理 电商系统 4月月更

直播回顾| Apache Pulsar 2.10.0 新特性概览

Apache Pulsar

开源 架构 云原生 Apache Pulsar Apache Pulsar 社区

高性能云桌面服务提供商酷栈科技加入龙蜥社区,共建开源新生态

OpenAnolis小助手

开源 云桌面 龙蜥社区 CLA 酷栈科技

深入剖析 RocketMQ 源码 - 负载均衡机制

vivo互联网技术

负载均衡 分布式 java

手机应用使用情况监控统计APP

android App 自律

Hoo虎符研究院|区块简报220406期

区块链前沿News

虎符交易所

【架构学习 07】——王者荣耀商城异地多活架构设计

tiger

架构实战营

linux之ssh-keygen命令

入门小站

Linux

为什么Java仍旧生机盎然——对“为什么Java正在消亡”的回应

Geek_rze78a

Java

OceanBase 在江西人社养老统筹系统的实践分享

OceanBase 数据库

oceanbase 江西人社

web前端培训-数组扁平化实现方式

@零度

前端开发 ES6

使用 Next.js、LeanCloud 和 Tailwind CSS 创建全栈应用

张泽豪

全栈 LeanCloud nextjs Tailwind Vercel

OpenMLDB 获评 CSDN IT 技术影响力之星 “年度开源项目”奖项

第四范式开发者社区

人工智能 深度学习 数据库 开源 特征平台

带码农《手写Mybatis》进度3:实现映射器的注册和使用

小傅哥

小傅哥 mybatis 手写Mybatis

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