Rust的借用规则是否妨碍函数式数据结构的实现?

9

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

考虑到这些数据结构非常依赖于共享(且没有主要所有者),那么借用会妨碍实现这些数据结构吗?


这个问题似乎过于宽泛或基于个人观点。您是否尝试过某些方法但却不奏效?您是否了解unsafe提供的“逃生口”?在这里什么样的回答才是有效的?有一个hamt crate,它提供了一个答案吗? - Shepmaster
3
请参阅此问题的答案。它解释了Rc允许多个所有者拥有相同的数据,虽然.clone()看起来像是在复制数据,但实际上它是浅层复制,不会真正复制数据。其实是不可变性使得这种情况成为可能。在此处,hamt crate使用了Rc 这里 - Alex Knauth
共享不可变所有权通常通过显式地进行垃圾回收来实现简单化。循环数据是问题的关键部分。 - Veedrac
1个回答

8

简短回答: 不行

详细回答:

Rust与不可变结构非常配合(它比C的const提供更多的保证)。

共享所有权没有问题(Rc/ Arc),对于真正的不可变值,您可以轻松地借用多次到不可变结构中。在借用时无法移动,但这可以通过分发拥有代理(再次使用RcArc)而不是引用来规避。

Rust中的一个问题是,如果将可变值与CellRefCell混合使用,则可能会创建循环,并且这些循环将不被收集,因为Rust没有GC。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接