繁体   English   中英

如果没有 Rust 风格的借用检查,Rust 风格的所有权和生命周期是否可能?

[英]Is Rust-style ownership and lifetimes possible without Rust-style borrow checking?

编程语言是否有可能始终拥有 Rust 风格的所有权和生命周期(用于自动内存管理),同时放弃在任何时候都只能存在对一段数据的一个可变引用(用于抑制数据竞争)的要求?

换句话说,Rust 风格的所有权和生命周期和 Rust 风格的借用检查是两个可分离的概念吗? 或者,这两个想法是否在语义层面上固有地纠缠在一起?

编程语言是否有可能始终拥有 Rust 风格的所有权和生命周期(用于自动内存管理),同时放弃在任何时候都只能存在对一段数据的一个可变引用(用于抑制数据竞争)的要求?

一种语言可以做任何如此确定的事情。

问题在于,在 Rust 之类的语言中,删除此要求将是一个 UB 嵌套:如果您删除唯一的可变引用,那么它们就没有意义,所以您只有引用(总是可变的),并且它们所做的唯一事情就是词法作用域,这意味着您可以持有对对象子部分的引用,并通过第二个引用来改变对象,从而使子部分无效(例如,对 vec 项的引用并清除 vec[0]),第一个引用现在是dangling ,它指向垃圾。

解决这个问题的方法是……添加一个 GC? 从那时起,“rust 风格的所有权和引用”的价值变得……仅限于不存在,因为您需要一个 GC 非词法自动内存管理,并且您的引用可以使对象保持活动状态,因此默认情况下所有类型都是仿射的非常有用。

现在有用的(以及一些语言探索的)是选择加入次正常类型,因此默认情况下类型是正常的,但可以根据需要选择仿射、线性甚至有序。 这将仅仅是一种类型安全措施。

如果是这样,是否有任何现有的语言可以实现这一目标?

据我所知不是。

如果没有,为什么不呢?

因为没人写过? 默认情况下,仿射类型对 Rust 很有用,但它们通常不是超级有用,因此大多数研究和设计都集中在线性类型上,线性类型提供更多保证,因此如果只有一小部分类型将要使用,则更有用不正常。

[0] 这表明“数据竞争”不仅与并发有关,它还是在顺序代码中常见的整类问题(例如迭代器失效)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM