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