【发布时间】:2011-03-07 15:14:38
【问题描述】:
Scala 中的所有不可变数据结构都是持久的吗?如果不是,它们中的哪些是,哪些不是?那些坚持不懈的人的行为特征是什么?另外,它们与 Clojure 中的持久数据结构相比如何?
【问题讨论】:
标签: data-structures scala clojure persistent
Scala 中的所有不可变数据结构都是持久的吗?如果不是,它们中的哪些是,哪些不是?那些坚持不懈的人的行为特征是什么?另外,它们与 Clojure 中的持久数据结构相比如何?
【问题讨论】:
标签: data-structures scala clojure persistent
Scala 的不可变数据结构都是持久的,从某种意义上说,旧值由“更新”操作维护。事实上,我不知道不可变和持久之间的区别。对我来说,这两个术语是别名。
Scala 2.8 的两个不可变数据结构是向量和哈希尝试,表示为 32 叉树。这些最初是由 Phil Bagwell 设计的,他在 EPFL 与我的团队一起工作,然后被 Clojure 采用,现在最终被 Scala 2.8 采用。 Scala 实现与 Clojure 实现共享一个共同的根,但肯定不是它的一个端口。
【讨论】:
请看看 Daniel Spiewak 的这些优秀文章:
http://www.codecommit.com/blog/scala/implementing-persistent-vectors-in-scala
http://www.codecommit.com/blog/scala/more-persistent-vectors-performance-analysis
他还指的是 Clojure 实现。
【讨论】:
List、Vector、HashMap 和 HashSet 在 Scala 2.8 上都是持久化的。还有其他持久性数据结构,但这些涵盖了所有主要用途,我不确定列举所有这些有什么意义。
【讨论】:
对于您问题的最后一部分,我记得 Rich Hickey 在演示文稿中提到 Clojure 数据结构已被移植到 Scala。此外,Michael Fogus 在 this interview 中提到了 Scala 2.8 采用 Clojure 的一些数据结构的计划。
抱歉,细节太少了...我不确定上述 Scala 2.8 计划的状态如何,但我记得 Rich 和 Michael 提到过这一点,并认为这对你来说可能是一件有趣的事情 google如果你有兴趣的话。
【讨论】: