Find centralized, trusted content and collaborate around the technologies you use most.
Teams
Q&A for work
Connect and share knowledge within a single location that is structured and easy to search.
函数式数据结构(例如 Haskell/Clojure/Scala 中使用的 Hash Array Mapped Trie)依赖于底层数据结构中的大量共享。例如,如果我们insert在类似地图的数据类型上实现,该数据类型通常通过在实现数据结构的树上进行路径复制来实现。
insert
鉴于这些数据结构在很大程度上依赖于共享(并且没有主要所有者)底层价值,借用是否会妨碍实现这些结构?
简短的回答:不。
长答案:
Rust 实际上在不可变结构上工作得很好(const例如,它提供了比 C 更多的保证)。
const
共享所有权没有问题 ( Rc/ Arc) 具有真正不可变的值,您可以轻松地多次借入不可变结构。借用时您不能移动,但这可以通过分发拥有代理(通过Rc或Arc再次)而不是参考来规避。
Rc
Arc
你在 Haskell 中可能没有的 Rust 中的一个问题是将可变值与Cell或混合在一起RefCell,然后你可以创建循环,而这些不会被收集,因为 Rust 没有 GC。
Cell
RefCell