【AICon】AI 基础设施、LLM运维、大模型训练与推理,一场会议,全方位涵盖! >>> 了解详情
写点什么

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

评论

发布
暂无评论

全球首批搭载英特尔Xe MAX独显惊艳上市,非凡S3x尽显创作魅力

E科讯

互联网审判中区块链存证技术的应用进路

CECBC

互联网 电子存证

低代码开发不靠谱?看低代码开发在物联网APP开发中的应用

华为云开发者联盟

技术 软件开发 代码

英特尔进军独显领域,第一批搭载锐炬®Xe MAX独显轻薄本已问世!

E科讯

诈骗?通证项目方的危局

CECBC

区块链 法律

http请求中get和post方法的区别

测试人生路

HTTP post GET

隐私计算S2赛季 谁是真正的王者?

hellompc

学习 隐私计算

字节跳动HR:3年从4000人招到10万人,我经历了什么

Java架构师迁哥

架构师训练营 -week07-作业

大刘忙

极客大学架构师训练营

华为发布5GtoB核心网建设白皮书

华为云开发者联盟

5G 边缘技术

性能测试,简单的压测工具

garlic

极客大学架构师训练营

蚂蚁金融推迟上市:互联网金融是否要遭遇滑铁卢

石头IT视角

Redis最常见的16道面试题与详解

Java架构师迁哥

25个小众的Java库

GuoYaxiang

Java 开发工具

我去!三面字节竟全败在Redis上,带薪摸鱼刷1949页进阶笔记

996小迁

Java redis 架构 面试 程序人生

NPC Follow

katichar

Flink 1.11 与 Hive 批流一体数仓实践

Apache Flink

flink 流计算 实时计算

线上Java程序占用 CPU 过高,请说一下排查方法?

古时的风筝

Java JVM cpu 100%

JVM真香系列:.java文件到.class文件

田维常

JVM

从技术到应用实践 揭秘京东区块链布局全景

京东科技开发者

区块链 区块链方案 供应链

啥是数据库范式

Simon

MySQL 数据库 数据库设计

训练营第三周作业

大脸猫

极客大学架构师训练营

字节跳动大神亲自总结SpringBoot手册,让你可以在简历上写精通SpringBoot!

Java架构追梦

Java 架构 面试 微服务 springboot

架構師訓練營第 1 期 - 第 07 周作業

Panda

架構師訓練營第 1 期

搭载设计师级独显英特尔Xe MAX,非凡S3x体验全能创作

E科讯

ViewportFrame demo

katichar

训练营第三周总结

大脸猫

极客大学架构师训练营

MySQL中特别实用的几种SQL语句送给大家

陈哈哈

SQL优化 实用SQl语句 高性能SQL

谈谈敏捷开发概念和迭代开发方案

Philips

敏捷开发 快速开发

阿里P8对Thread核心源码讲解

Java架构师迁哥

“十三五”收官,区块链赋能能源电力路在何方?

CECBC

区块链 电力 能源

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