9

函数式数据结构(例如 Haskell/Clojure/Scala 中使用的 Hash Array Mapped Trie)依赖于底层数据结构中的大量共享。例如,如果我们insert在类似地图的数据类型上实现,该数据类型通常通过在实现数据结构的树上进行路径复制来实现。

鉴于这些数据结构在很大程度上依赖于共享(并且没有主要所有者)底层价值,借用是否会妨碍实现这些结构?

4

1 回答 1

8

简短的回答:

长答案:

Rust 实际上在不可变结构上工作得很好(const例如,它提供了比 C 更多的保证)。

共享所有权没有问题 ( Rc/ Arc) 具有真正不可变的值,您可以轻松地多次借入不可变结构。借用时您不能移动,但这可以通过分发拥有代理(通过RcArc再次)而不是参考来规避。

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

于 2016-01-17T13:31:21.430 回答