Scala中的所有不可变数据结构是否持久存在?如果不是,哪一个是哪个,哪个不是?那些持久的行为特征是什么?另外,它们如何与Clojure中的持久数据结构进行比较?
答案 0 :(得分:53)
Scala的不可变数据结构都是持久的,因为旧值是由“更新”操作维护的。事实上,我不知道不可变和持久之间的区别;对我来说,这两个词是别名。
Scala的2.8个不可变数据结构中的两个是向量和散列尝试,表示为32个树。这些最初由Phil Bagwell设计,他与我的团队一起在EPFL工作,然后被Clojure采用,现在最终被Scala 2.8采用。 Scala实现与Clojure实现共享一个公共根,但肯定不是它的端口。
答案 1 :(得分:9)
请看看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实施。
答案 2 :(得分:6)
List,Vector,HashMap和HashSet在Scala 2.8上都是持久的。还有其他持久性数据结构,但这些结构涵盖了所有主要用途,我不确定列举所有这些结构是否有任何意义。
答案 3 :(得分:4)
对于问题的最后一部分,我记得Rich Hickey在演示文稿中提到Clojure数据结构已移植到Scala。另外,Michael Fogus提到了Scala 2.8在this interview中采用Clojure的一些数据结构的计划。
对不起,这个细节太短了......我不确定上面提到的Scala 2.8计划的状态是什么,但我记得Rich和Michael提到这一点,并认为对谷歌来说这可能是一个有趣的事情如果你有兴趣的话。