功能数据结构(例如Haskell / Clojure / Scala中使用的Hash Array Mapped Trie)依赖于底层数据结构中的大量共享。例如,如果我们在类似地图的数据类型上实现insert
,通常通过在实现数据结构的树上进行路径复制来实现。
鉴于这些数据结构在很大程度上依赖于共享(并且没有主要所有者)的基础价值,借贷是否会阻碍实施此类结构?
答案 0 :(得分:8)
简答:否。
长答案:
Rust实际上对不可变结构非常有效(例如,它提供的保证比C const
更多。)
共享所有权不是问题(Rc
/ Arc
),具有真正不可变的值,您可以轻松地多次借入不可变结构。借款时不能移动,但可以通过分发拥有代理(再次通过Rc
或Arc
而不是引用)来规避这一点。
您在Haskell中可能没有的Rust中的一个问题是将可变值与Cell
或RefCell
混合在一起,因为您可以创建循环并且不会收集那些因为Rust已经收集的没有GC。