写点什么

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

评论

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

技术分享 | 基于Dify的多终端亚马逊云科技智能化运维助手

伊克罗德信息科技

企业级数据采集解决方案:Dify + MCP Server + LLM打造零代码YouTube创作者主页分析智能体

不叫猫先生

数据分析 LLM dify MCP Server

多语言采集淘宝商品详情数据,淘宝API(json数据返回)

tbapi

淘宝商品数据接口 淘宝API 淘宝商品数据采集 淘宝商品详情API

舆情监测无国界,赢得海外市场的关键:社交媒体监控

沃观Wovision

跨境贸易 社交媒体 沃观Wovision 舆情监测系统 海外舆情监测

研发效能提升为何这么难?

思码逸研发效能

研发效能 研发效能度量 研发效能管理

撕开厂商锁定黑箱:MyEMS 如何用开源代码夺回能源管理的 “自主控制权”?

开源能源管理系统

开源 能源管理系统

数字孪生 + 碳痕追踪:MyEMS 给能源管理装了套 “全链路全景导航”

开源能源管理系统

开源 能源管理系统

低代码“日程编辑”全功能拆解,新手速藏!

引迈信息

​新一代边缘全栈开发平台!EdgeOne Pages 全面升级,加速 AI 开发部署

极客天地

破局 “节能不省钱” 悖论:开源 EMS 生态如何让中小企业用 1/3 成本实现能效跃升?

开源能源管理系统

开源 能源管理系统

大数据-105 Spark GraphX 入门详解:分布式图计算框架全面解析 架构、算法与应用场景

武子康

Java 大数据 flink spark 分布式

产品经理如何借力项目管理软件,驾驭复杂项目并准时上线?

Tecjt_锦图科技

项目管理

告别“硬件绑定”困局:青云云易捷如何让异构服务器“物尽其用”

智驱前线

怎么自由调整字体的字重?UI设计可变字体来帮你!

职场工具箱

效率工具 设计 办公软件 字体 ui设计

英伟达入资 11Labs,黄仁勋:语音 AI 带来情感、共情和联结;Qwen3-TTS-Flash:多语言,多音色,多方言丨日报

声网

基于HarmonyOS SDK开放能力的微博社交体验构建实践

HarmonyOS SDK

HarmonyOS NEXT HarmonyOS SDK应用服务

低代码:企业数字化转型的「快捷键」正在重塑生产力

伤感汤姆布利柏

2025-09-24 - 今日热门信息 - jobleap4u.com

Y11

面试 求职 找工作 招聘 笔试

企业服务管理是做什么的?-ManageEngine卓豪

ServiceDesk_Plus

ManageEngine卓豪

版权数据集上新 | 覆盖大模型、多模态大模型、语音识别、语音合成及计算机视觉等多领域

数据堂

计算机视觉 语音识别 语音合成 大模型 多模态大模型

spirv 块的管理

Miracle

如何通过Python SDK 向 Collection 中插入 Doc

DashVector

人工智能 数据库 大数据 AI

我用Zulu写了一款塔防游戏给弟弟当生日礼物

Comate编码助手

AI辅助编程 AI 编程 文心快码 文心快码Zulu

一文看懂Playwright MCP如何引爆AI智能体爆发

测试人

人工智能 软件测试

spirv 开端

Miracle

到底什么是“研发效能”?

思码逸研发效能

研发效能 研发效能度量 研发效能管理 思码逸

spirv 进阶 inline 函数

Miracle

拍宝拍卖多开小程序系统:全平台适配与定制化解决方案

微擎应用市场

AI语义预检内容助力企业

跑一跑

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