阿里云「飞天发布时刻」2024来啦!新产品、新特性、新能力、新方案,等你来探~ 了解详情
写点什么

Swift 内存所有权宣言

  • 2017-03-07
  • 本文字数:1252 字

    阅读完需:约 4 分钟

根据 Chris Lattner 介绍,Swift 4 的主要目标之一就是要定义一个类似于 Rust/Cyclone 的内存所有权模型(Memory Ownership Model)。Chris Lattner 是 Swift 的创建者,在跳槽到Tesla 之前曾担任Swift 团队负责人。在Swift 4 当前已进入第二阶段的情况下,Swift 团队发布了一个宣言,详细阐明了Swift 内存所有权的工作方式。

Swift 编译器为确定所有权转换的时机,已实现了一种自己的不透明所有权模型(即 ARC )。虽然所有权在一些情况下是很明晰的,但是编译器也会在一些情况下做出错误假设,进而导致不必要的复制。简而言之,Swift 的新内存所有权模型使得内存复制尽可能地处于开发人员的控制之下。定义该模型在于尽量克服当前写时复制(copy-on-write)在引用计数方法上的不足之处,包括:引用计数的开销及性能偶尔无法预测,以及为实现随时可复制的需求而笼统地分配堆内存。

虽然这些缺点通常对于应用编程并不会构成问题,但是对于那些需要一定性能保证的系统编程而言却不受欢迎。此外,更灵活的内存管理模型具有显著优点,这些优点同样适用于应用编程,去解决特定瓶颈问题的优化。基于上述原因,与 ARC 相比,选取 Swift 的新内存所有权模型无疑会更具优势,只有那些对更细化控制有需求的开发人员才需要承担模型的复杂性代价。

“独占性原则”(Law of Exclusivity)会影响到所有的 Swift 开发人员,这一更改并非可选择添加的。它强制变量不能以冲突的方式同时访问,典型情况包括变量作为inout参数传入两个不同函数,以及方法所接收的回调访问了方法所调用的同一变量。这两种情况当前在 Swift 中是允许的,移除他们无疑将会影响到所有的开发人员。此外,独占性原则会更改对参数所做的保证,进而影响到语言的应用二进制接口(ABI),因此它会成为被率先采用的特性之一。

除了独占性原则之外,Swift 还将引入新的标注和语言特性,允许传递共享值以及表达无法隐式复制的类型。宣言的作者指出。在独占性、显示控制共享值传递和不可复制类型这三种机制的共同作用下,编译器可以对代码做更好的优化。

简而言之,可以将新 Swift 所有权模型的高层愿景概括如下:

  • 如上所述,编译器将会标注所有非独占性使用的inout参数,无论是显式的还是隐式的。
  • 开发人员将可以定义一个变量是具有所有权的还是共享的,以避免在进入或离开词法作用域时引用计数和做不必要的拷贝 / 销毁。
  • 开发人员将可以定义moveonly(即不可拷贝)类型,该类型对编译器不可复制,也不能用于创建更多的引用。moveonly类型具有 move 语义,被认为是一种高级特性。除此以外,所有类型将默认是可复制的。

宣言中为这一所有权模型定义所赋予 Swift 的全部特性给出了长篇的和详细的分析,宣言的细节内容仍非最终版本。Swift 开发人员 Alexis Beingessner发布了一篇更简短的文档,扼要地概括了宣言的要点。

查看英文原文: Swift Memory Ownership Manifesto


感谢张卫滨对本文的审校。

给InfoQ 中文站投稿或者参与内容翻译工作,请邮件至 editors@cn.infoq.com 。也欢迎大家通过新浪微博( @InfoQ @丁晓昀),微信(微信号: InfoQChina )关注我们。

2017-03-07 18:001861
用户头像

发布了 227 篇内容, 共 71.4 次阅读, 收获喜欢 27 次。

关注

评论

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

大规模集群下,如何快速实现无死角网络连通性的主动巡检

ii2day

云原生 压力测试 Cloud Native kubernetes 运维 自动巡检

合合信息启信数据发布园区金融解决方案,助力银行精准服务“十四五”特色产业

合合技术团队

大数据 金融 合合信息 启信慧眼

火山引擎VeDI:新增微信小程序广告A/B实验功能,助力企业降低获客成本

字节跳动数据平台

数据库 大数据 ab测试 企业号 1 月 PK 榜 对比实验

三个方面浅析数据对大语言模型的影响

华为云开发者联盟

人工智能 华为云 华为云开发者联盟 大语言模型

万字图解 | 深入揭秘IP层工作原理

云舒编程

IP MTU 路由表 子网划分 图解网络

foobar2000 for mac多功能音频播放器 v2.6.1免激活版

Rose

mac音乐播放器 foobar2000中文版 foobar2000破解版

测试管理 | 入班第二个月后拿到4个知名企业Offer,他是怎么做到的?

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

测试

定制+轻量级低代码:满足客户个性需求的最佳实践

天津汇柏科技有限公司

低代码 软件定制开发 软件开发定制

阿里云 Flink 原理分析与应用:深入探索 MongoDB Schema Inference

Apache Flink

NLP国内外大模型汇总列表[文心一言、智谱、百川、星火、通义千问、盘古等等]

汀丶人工智能

nlp 大模型

探讨 LLM 的潜在风险 (偏见与毒性等),是否存在解决之道?

Baihai IDP

人工智能 程序员 AI LLM 白海科技

QSpace Pro 一款简洁高效的多窗格文件管理器,灵活且实用!

Rose

Mac软件 QSpace 多窗格文件管理器

苹果macos效率神器alfred5新功能介绍 及alfred 5汉化包下载

Rose

mac软件下载 Alfred 5破解版 Alfred 中文 Mac效率办公软件

当当网按关键字搜索dangdang商品 API (item_search-按关键字搜索dangdang商品-dangdang.item_search)在电商中的应用

技术冰糖葫芦

API

WorkPlus Meet私有化视频会议内网部署

WorkPlus

苹果电脑游戏:以撒的结合:重生+忏悔+胞衣 Mac中文版下载

Rose

mac游戏 以撒的结合:忏悔

两千字讲明白java中instanceof关键字的使用!

EquatorCoco

Java 软件开发 开发语言 关键词

得物从零构建亿级消息推送系统的送达稳定性监控体系技术实践

JackJiang

网络编程 即时通讯 IM

非常火爆“太空种田”游戏Slipways mac破解版

Rose

mac游戏 苹果电脑游戏推荐

跨境电商如何利用item_get-根据ID取商品详情(shopee.item_get)提升用户体验?

技术冰糖葫芦

API 编排

荣耀开发者大会 2023 · 一张图读懂极致体验分论坛

荣耀开发者服务平台

用游戏盾会掉线吗,游戏出现掉线或者卡顿的可能有哪些原因

德迅云安全杨德俊

想在 Mac 里装 Windows ?试试 Parallels Desktop虚拟机!

Rose

Windows系统 Mac双系统安装 Parallels Desktop

马斯克接手Twitter一年后的成果-工作量化的重要性

云舒编程

twitter 马斯克 推特

万字图解|深入揭秘 (数据链路层、物理层) 工作原理

云舒编程

IP 物理层 路由 图解网络 数据链路层

WorkPlus移动应用管理平台,助力企业实现高效移动办公

WorkPlus

【技术探讨】如何选择一款距离远的无线通信模块?

Geek_ab1536

《Hive编程指南》读书笔记

京东科技开发者

NineData和Klustron完成产品兼容互认证

NineData

数据库 数据管理 NineData Klustron 泽拓昆仑

WorkPlus构建便捷高效的企业移动门户平台

WorkPlus

SnapGene 5最新补丁版 生物分子学软件snapgene5 for Mac安装教程

Rose

Mac软件 SnapGene 5破解版 SnapGene 5下载 DNA序列分析

Swift内存所有权宣言_开源_Sergio De Simone_InfoQ精选文章