Rust的借用规则是否妨碍了功能数据结构的发展?

时间:2016-01-15 18:10:46

标签: rust borrowing

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

鉴于这些数据结构在很大程度上依赖于共享(并且没有主要所有者)的基础价值,借贷是否会阻碍实施此类结构?

1 个答案:

答案 0 :(得分:8)

简答:

长答案:

Rust实际上对不可变结构非常有效(例如,它提供的保证比C const更多。)

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

您在Haskell中可能没有的Rust中的一个问题是将可变值与CellRefCell混合在一起,因为您可以创建循环并且不会收集那些因为Rust已经收集的没有GC。