时隔16年Jeff Barr重返10.23-25 QCon上海站,带你看透AI如何重塑软件开发! 了解详情
写点什么

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

评论

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

高质量、高并发的实时通信架构设计与探索

融云 RongCloud

冰河公开了其总结的一项重要的编程技能!

冰河

Java 正则表达式 程序员

你是否觉得上级的能力不如你?

石云升

心理学 28天写作 职场经验 管理经验 3月日更

我们为什么需要云原生?

脑极体

初识Golang之安装运行篇

Kylin

3月日更 21天挑战 Go 语言

标准引领 浪潮工业互联网助力澳门质量品牌国际认证联盟成立

工业互联网

【得物技术】TDengine在得物的落地应用

得物技术

数据库 tdengine 数据 sentinel 得物技术

白话讲解,拜占庭将军问题

架构精进之路

分布式 算法 3月日更

我是如何拿到5大银行offer

小舰

面试 银行 笔试 校园招聘

面试现场:遇到不会回答的问题,如何力挽狂澜 ?

xcbeyond

面试 3月日更

Hadoop UI 系统 -HUE 详细剖析

大数据技术指南

大数据 hadoop 28天写作 3月日更

实时数据流计算引擎Flink和Spark流计算对比

小舰

大数据 flink spark 流计算

Spark提交后都干了些什么?

小舰

大数据 spark Spark调优

Github上堪称最全的面试题库(Java岗)到底有多香

Java 程序员 架构 面试

你真的懂Spring解决循环依赖吗?

Java 架构 Spring Boot

linux下七种文件类型

xiezhr

Linux linux操作 linux运维 linux 文件权限控制

(28DW-S8-Day28) 战略流程重整

mtfelix

28天写作

如何在 Spring 生态中玩转 RocketMQ?

阿里巴巴云原生

Java Serverless 微服务 云原生 中间件

朱嘉明:全面认知区块链的科学特征

CECBC

区块链

融合发展是区块链的未来 数字通证新模式具有划时代意义

CECBC

数字通证

大专生阿里/腾讯/京东面经分享:Java面试精选题+架构实战笔记(技术狂补)

比伯

Java 编程 架构 面试 计算机

并发编程:一次搞定单例模式

Java架构师迁哥

翻译:《实用的Python编程》07_00_Overview

codists

Python

安全高可用通信背后的 MySQL 优化实践

融云 RongCloud

源码分析-Netty: 架构剖析

程序员架构进阶

架构 Netty 源码剖析 28天写作 3月日更

利用区块链技术,打造绿色发展的中药材生态链

CECBC

中药材

C/C++Linux服务器开发完整学习路线(含免费学习资料下载地址)

Linux服务器开发

Linux 后端 C/C++ Linux服务器开发 Linux后台开发

微信小程序开发:如何快速实现添加一条分割线的项目需求

三掌柜

微信小程序 3月日更

深入剖析数据库事务的隔离级别

小舰

数据库 事务隔离级别 数据库事务

打击虚拟货币洗钱:中国破获比特币跨境洗钱案

CECBC

虚拟货币

我从外包辞职了,10000小时后,走进字节跳动拿了offer

Java 编程 程序员 架构 面试

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