限时领|《AI 百问百答》专栏课+实体书(包邮)! 了解详情
写点什么

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:002286
用户头像

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

关注

评论

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

站在2023起跑线,政企数字化如何深入“核心地带”?

脑极体

功能上新|使用 Excel 低门槛进行指标分析!

Kyligence

数据分析 指标管理

小数据治理靠“人工”,大数据治理靠“智能”

用友BIP

华为时习知,让企业培训更简单!

IT科技苏辞

阿里云对话 Tapdata:以秒级响应速度,为企业提供实时数据服务

tapdata

ETL 实时数据 DaaS 现代数据栈

一图了解人造石墨负极材料上中下游全产业链

PreMaint

新能源 锂电池

【从零开始学爬虫】采集全国高校导师数据

前嗅大数据

数据采集 爬虫教程 爬虫入门

数字先锋| 活起来、动起来、用起来!“海南模式”让数据要素发挥更大价值

天翼云开发者社区

移动办公时代,就看华为云桌面

秃头也爱科技

案例 | 九科信息为某大型科研单位设计财务系统科目预警RPA

九科Ninetech

作为一个研发凭什么花大量时间修安全漏洞?

墨菲安全

安全 开发

华为云发布CodeArts Req需求管理工具,让需求管理化繁为简

IT科技苏辞

MySQL分库分表,可能真的要退出历史舞台了!

Java永远的神

MySQL 程序员 后端 架构师 分布分表

外包学生管理系统架构文档

白杨

数字先锋| 药品信息何处有?尽在标识编码处

天翼云开发者社区

直播倒计时1天!“基于AIOps的全面可观测性网络研讨会”与你不见不散

博睿数据

根因分析 直播 智能运维 博睿数据

案例 | 九科信息久其报表RPA项目助力某大型央企财务部门提质增效

九科Ninetech

软件测试面试真题 | web自动化关闭浏览器,quit()和close()的区别

测试人

软件测试 面试题 自动化测试 测试开发 web测试

PM&PMO汇报工作的5大技巧,学会了让老板眼前一亮!

PMO实践

PMO 年终报告 年终总结 项目经理

Syscoin宣布与Web3孵化器WEconomy建立长期合作伙伴关系

100DAO 加速计划

DAO #Syscoin #区块链 #Web3

远程办公成趋势,华为云桌面为何连续7年领跑?

秃头也爱科技

架构实战营第 10 期 - 模块三作业:外包学生管理系统详细架构设计文档

kaizen

「架构实战营」

天翼云斩获2022全球分布式云大会两项大奖

天翼云开发者社区

2022年中国第三方输入法发展分析

易观分析

报告 输入法 语音输入

重磅 | 九科信息成功入选中国交通建设集团财务云(RPA)项目

九科Ninetech

TSDB在油气田勘探开发领域的应用

CnosDB

IoT 时序数据库 开源社区 CnosDB infra

云渲染时可以关机吗_云渲染电脑可以关闭吗?

Renderbus瑞云渲染农场

云渲染

HTTP其他首部字段

穿过生命散发芬芳

HTTP 12月月更

新茶饮 200+ 门店优化库存成本,需要几个数据分析师?

Kyligence

数据分析 指标中台

软件测试面试真题 | 需求评审中从几个方面发现问题

测试人

软件测试 面试题 自动化测试 测试开发 需求评审

安全可信| 安全与高效兼得?天翼云EasyCoding敏捷开发平台来了!

天翼云开发者社区

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