写点什么

Swift 5.10 重磅更新:并发代码安全性再上新台阶

  • 2024-03-29
    北京
  • 本文字数:1007 字

    阅读完需:约 3 分钟

大小:491.21K时长:02:47
Swift 5.10 重磅更新:并发代码安全性再上新台阶

最新发布的 Swift 5.10 版本虽然只带来了少数新提案,但在语言的并发模型方面却取得了显著进步。Swift 团队工程师 Holly Borla 解释说,现在编译器已经能够在编译阶段确保数据的完全隔离。


Borla 回顾了 Swift 并发模型自 Swift 5.5 引入 async/await、actors 和结构化并发以来的成熟过程。从 Swift 5.7 采用 Sendable 协议作为线程安全类型的基石,到 Swift 5.10 实现编译时完全数据隔离,每一步都体现了 Swift 在并发编程领域的持续进步。


Swift 5.10 在语言的各个方面全面完善了数据竞态安全语义,并修复了 Sendable 和 actor 隔离检查中的大量 bug,从而加强了完全并发检查的保证。实际上,Swift 5.10 编译器新增了一个名为 -strict-concurrency=complete 的标志,这个标志能在编译时检测潜在的数据竞态,从而加强并发编程的安全性。在之前的 Swift 5.9 版本中,某些隔离违规问题只能在运行时通过断言来检测,而在 Swift 5.10 中,这些问题在编译阶段就会被标记为潜在的编程错误,并引发警告。


虽然这种更严格的行为有助于提升代码的安全性,但也可能导致误报,即正确的代码被错误地标记。Borla 指出,这是由于编译器需要减少分析量以控制编译时间成本,这一问题将在未来的语言版本中得到改进。


为了应对这种情况,开发者可以在特定的 actor 或实现 Sendable 协议的类上使用 nonisolated(unsafe)@unchecked Sendable 来局部禁用完全数据隔离检查。但需要注意的是,这种做法将使代码进入 “不安全” 的领域,因此在选择退出完全数据隔离检查时,务必谨慎行事,确保自己了解潜在的风险。正如 iOS 开发者和 Swift 书籍作者 Donny Wals 所建议的:


每当你想使用 nonisolated(unsafe) 时,最好先反思一下:是否可以考虑将标记为隔离的类型转变为全局 actor,或者是否可以将属性的类型设定为 Sendable 且设置为不可变。在 Swift 5.10 编译器中,安全访问共享状态的方式主要有两种:一是结合使用不可变状态与 Sendable,二是利用 @MainActor 将共享状态封装在全局 actor 中。


然而,在编译那些使用信号量或 DispatchQueues 手动确保隔离的旧代码时,可能需要用到不安全的退出指令,这一点需要注意。


如前所述,Swift 5.10 的并发模型并非尽善尽美,有时可能会产生过多的数据竞态误报。据 Borla 透露,Swift 团队正在积极改进这一点,为即将在下一次 Apple WWDC 大会上发布的 Swift 6 版本做好充分准备。


原文链接

https://www.infoq.com/news/2024/03/swift-5-10-released/

2024-03-29 08:004956

评论

发布
暂无评论
发现更多内容

使用JMeter玩转tidb压测

TiDB 社区干货传送门

性能测评

Java 调用 Go 解决方案

FunTester

揭秘大厂后端面试硬核考点

王中阳Go

面试 后端 Go 面试题 面经 后端 大厂

代码片段管理工具SnippetsLab for Mac激活版

小玖_苹果Mac软件

TiDB:Prometheus 安全访问策略配置全指南

TiDB 社区干货传送门

监控 集群管理 管理与运维

TiDB 版本升级:glibc 2.17 升级到 glibc 2.28 最佳实践

TiDB 社区干货传送门

版本升级

免费下载|《可观测性体系建设100问》全册解锁!

博睿数据

【论文速读】| 利用大语言模型在灰盒模糊测试中生成初始种子

云起无垠

年度人力费用你管对了吗?

AMT企源

企业管理 人力成本管控 人力费用

如何在 NocoBase 中开发插件发送 WhatsApp 消息?

NocoBase

开源 工作流 低代码 插件 无代码

剪贴板文件笔记快捷工具Unclutter for Mac激活版

小玖_苹果Mac软件

显卡较量:AMD和英伟达哪个好?

Finovy Cloud

英伟达 AMD 显卡

TiDB:AUTO_INCREMENT 实现连续自增的改造要点

TiDB 社区干货传送门

迁移 实践案例 管理与运维

天下武功,唯快不破 : TiDB DDL 语句执行性能整体提升 10 到 50 倍

TiDB 社区干货传送门

8.x 实践

2024 TiDB 社区年度总结,又携手共进了一年,2025年,一起迎接变化,挑战变化!

TiDB 社区干货传送门

智慧公厕2.0:未来城市公共卫生空间的新探索

光明源智慧厕所

RAG的技术困境:为何单纯依赖向量嵌入不可靠?

Baihai IDP

人工智能 程序员 AI LLMs rag

全球领先光伏企业的碳管理进阶之旅

AMT企源

碳管理

推荐一个适合TikTok直播的海外直播专线

Ogcloud

海外直播专线 tiktok直播 tiktok直播专线 tiktok直播网络 tk直播专线

浏览器缓存清理工具Cookie for Mac激活版

小玖_苹果Mac软件

知乎 TiDB 实践系列 | tidb-operator 生产实战篇(TiDB v8)

TiDB 社区干货传送门

实践案例 管理与运维 安装 & 部署 TiDB Cloud

TiDB 升级高版本时 “mysql.tidb_runaway_watch” 不存在问题解决攻略

TiDB 社区干货传送门

版本升级 集群管理 管理与运维 6.x 实践 7.x 实践

总结 JavaScript 中的变体函数调用方式

李游Leo

JavaScript 前端 前端‘’

“领导企业转型必修课” 3月1-2日敏捷领导者(CAL1)认证周末班

ShineScrum

Scrum 敏捷 敏捷领导力 敏捷培训

为什么软件测试开发需要智能体(AI Agent)?

测吧(北京)科技有限公司

测试

OpenAI O3模型:重构软件测试的未来

测试人

软件测试

Swift 5.10 重磅更新:并发代码安全性再上新台阶_大前端_Sergio De Simone_InfoQ精选文章