写点什么

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

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

关注

评论

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

模块一作业

大鹏

#架构实战营

鞍钢集团共和国钢铁工业长子的财务转型之路

用友BIP

财务数智化

QCA9880: A multi-dimensional engine driving wireless communications

wallysSK

测试开发 | 人工智能与分布式计算:驱动智能时代的强力结合

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

测试

Havenask分布式索引构建服务--Build Service

阿里技术

分布式 Havenask 分布式索引 Build Service

一起学Elasticsearch系列-索引管理

Java随想录

Java 大数据 Elastic Search

测试开发 | 人工智能在大规模数据分析中的崭新征程

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

测试

数栈UI5.0设计实战|B端表单这样设计,不仅美观还提效

袋鼠云数栈

数据中台 设计 表单 表单设计

软件测试/测试开发丨Pytest测试框架-跳过用例或预期用例失败

测试人

软件测试 测试开发

朋友们注意啦!破解脱壳接单了

Geek_7f3f61

小程序开发 定制开发 破解脱壳

HarmonyOS实践之应用状态变量共享

HarmonyOS开发者

HarmonyOS

方太厨电,在创新科技中看见烟火人间

脑极体

方太

堡垒机的类型分类

尚思卓越

运维 堡垒机

以数据指标穿透企业经营,优化业务流程,加速企业运转

用友BIP

人才管理

Excel可编辑PDF转化软件 PDF to Excel 最新激活版

胖墩儿不胖y

Mac软件 好用的办公软件推荐

2023云栖大会精彩内容集锦:《云原生核心技术与最佳实战指南》电子书重磅上线

阿里巴巴云原生

阿里云 云原生

概念回顾:REST API 和 GraphQL

NGINX开源社区

微服务 Rest API graphql REST API

湖南等保测评3家叫什么名字?分别在哪里?

行云管家

等级保护 等保测评 湖南

中粮、中交、云投等众多央国企携手用友打造世界一流人才管理体系

用友BIP

人才管理

Java多线程系列9:读写锁

BigBang!

Java多线程

低代码平台:多引擎、多应用,灵活构建企业数字化生态

天津汇柏科技有限公司

低代码

用 Tekton 来构建镜像并推送到极狐GitLab 私有仓库

极狐GitLab

淘宝商品评论数据接口(Taobao.item_review)

tbapi

天猫商品评论接口 天猫评论接口 淘宝商品评论数据接口 淘宝评论接口 淘宝评论API接口

官答|初始化GreatSQL报错无法找到数据目录或初始化数据字典失败

GreatSQL

故障排查 greatsql 官答

顺丰科技:打造智慧物流数据管理平台

新消费日报

从 Linux Crontab 到 K8s CronJob,定时任务正在经历怎样的变革

阿里巴巴云原生

阿里云 云原生 可观测

用友BIP全球司库助力央国企统一资金结算,更可控更高效

用友BIP

全球司库 资金结算

治理要从数据建模抓起 | 京东云技术团队

京东科技开发者

深入探索服装网商品详情API:实时数据获取、安全与隐私保护及商业价值实践

Noah

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