写点什么

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

评论

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

数据中台建设(四):企业构建数据中台评估

Lansonli

大数据 数据中台 7月月更

官宣,又一上市公司杀入数据库市场

亚信AntDB数据库

AntDB 国产数据库 aisware antdb

SQL 开始日期、结束日期查询

孙永潮

APP为什么用JSON协议与服务端交互:序列化相关知识

程序员啊叶

Java 编程 程序员 架构 java面试

上海移动基于亚信科技AntDB完成核心账务数据库的国产化替换

亚信AntDB数据库

AntDB 国产数据库 aisware antdb

Rust P2P网络应用实战-1 P2P网络核心概念及Ping程序

李明

rust 网络 Libp2p

专访亚信科技张桦:AntDB面向企业核心业务支撑的数据库产品

亚信AntDB数据库

AntDB 国产数据库 aisware antdb

Google Cloud X Kyligence|如何从业务视角管理数据湖?

Kyligence

数据湖 智能多维数据库

即时通讯-改变社交与工作状态的新型软件

BeeWorks

【7.22-7.29】写作社区精彩技术博文回顾

InfoQ写作社区官方

优质创作周报

今天拿SpringAOP和自定义注解的通用性开🔪

知识浅谈

切面编程 7月月更

微信公众号借助小程序云函数实现支付功能

Geek_24ed5f

签约计划第三季

面试被问到 HashMap 底层原理?我有点慌.

程序员啊叶

Java 编程 程序员 架构 java面试

兆骑科创海外高层次人才引进平台,企业项目对接,赛事活动路演

兆骑科创凤阁

兆骑科创赛事活动承办,项目路演,人才引进平台

兆骑科创凤阁

不会多线程还想进BAT?精选19道多线程面试题,有答案边看边学

程序知音

Java 多线程 面试题 后端技术 BAT面试题

面试?进大厂?还得靠这份Java面试指导手册

王小凡

Java 面试 JVM Java多线程 秋招

大模型轻量化实践路径

澜舟孟子开源社区

人工智能 自然语言处理 神经网络 深度学习 预训练模型

文档贡献与写作必读-OpenHarmony开发者文档风格指南

OpenHarmony开发者

Open Harmony

深圳见!云原生加速应用构建专场:来看云原生 FinOps、SRE、高性能计算场景最佳实践

阿里巴巴云原生

阿里云 云原生 峰会

你真的了解Redis的持久化机制吗?

C++后台开发

数据库 redis 后端开发 C/C++后台开发 C/C++开发

Jenkins 如何玩转接口自动化测试?

Liam

测试 jenkins 自动化测试 API 测试框架

从通信延伸到全行业,亚信科技AntDB 7.0蓄势待发

亚信AntDB数据库

AntDB 国产数据库 aisware antdb

金九银十喜提offer!秋招蚂蚁金服Java研发岗四面

程序员啊叶

Java 编程 程序员 架构 java面试

数字孪生万物可视 |联接现实世界与数字空间

华为云开发者联盟

云计算 大数据 后端 智慧城市 数字孪生

突破性能天花板!亚信数据库支撑 10 多亿用户,峰值每秒百万交易

亚信AntDB数据库

AntDB 国产数据库 aisware antdb

手摸手实现Canal如何接入MySQL实现数据写操作监听

知识浅谈

MySQ 7月月更

顶礼膜拜!阿里内部出品,全网首发Spring Security项目实战搭建

冉然学Java

编程 spring security springboot Spring 框架漏洞

基于Flink CDC打通数据实时入湖

数据社

签约计划第三季

关于数字化转型 你需要知道的八项指导原则

BeeWorks

一文读懂Elephant Swap,为何为ePLATO带来如此高的溢价?

西柚子

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