Rust 不要生锈';s的借用规则会妨碍功能数据结构吗?

Rust 不要生锈';s的借用规则会妨碍功能数据结构吗?,rust,borrowing,Rust,Borrowing,功能性数据结构(如Haskell/Clojure/Scala中使用的哈希数组映射Trie)依赖于底层数据结构中的大量共享。例如,如果我们在一个类似地图的数据类型上实现insert,该数据类型通常通过在实现数据结构的树上进行路径复制来实现 考虑到这些数据结构在很大程度上依赖于共享(而不是主要所有者)基础价值,借债会阻碍这些结构的实现吗?简单回答:不会 长答覆: Rust实际上可以很好地处理不可变结构(例如,它比C的const提供更多的保证) 共享所有权没有问题(Rc/Arc),具有真正不可变的值,

功能性数据结构(如Haskell/Clojure/Scala中使用的哈希数组映射Trie)依赖于底层数据结构中的大量共享。例如,如果我们在一个类似地图的数据类型上实现
insert
,该数据类型通常通过在实现数据结构的树上进行路径复制来实现


考虑到这些数据结构在很大程度上依赖于共享(而不是主要所有者)基础价值,借债会阻碍这些结构的实现吗?

简单回答:不会

长答覆:

Rust实际上可以很好地处理不可变结构(例如,它比C的
const
提供更多的保证)

共享所有权没有问题(
Rc
/
Arc
),具有真正不可变的值,并且您可以轻松地多次借用到不可变的结构中。您不能在借用时移动,但可以通过分发拥有的代理(再次通过
Rc
Arc
而不是引用)来避免这种情况


Rust中的一个问题可能在Haskell中没有,就是将可变值与
单元格
RefCell
混合在一起,因为你可以创建循环,而这些循环不会被收集,因为Rust没有GC。

如前所述,这个问题似乎过于宽泛或基于观点。你有没有试过什么东西却没用?您是否知道
不安全
提供的“逃生舱”?什么样的答案在这里是有效的?有一个,这是否提供了答案?请参阅的答案。它解释说,
Rc
允许同一数据的多个所有者,虽然它看起来像是
.clone()
进行复制,但它是一个浅拷贝,实际上并不复制数据。事实上,这是不可变的,它允许这种情况发生。hamt板条箱使用
Rc
。通过使GC显式化,共享的不可变所有权通常很简单。循环数据是有问题的部分。