Scala中的所有不可变数据结构是否持久?如果不是,它们是哪一个,哪一个不是?那些持久的行为特征是什么?另外,它们如何与Clojure中的持久数据结构进行比较?Scala中的持久数据结构
回答
Scala的不可变数据结构都是持久的,因为旧值由`update'操作维护。事实上,我不知道永恒和永恒之间的区别。对我来说这两个词是别名。
斯卡拉2.8不可变数据结构中的两个是向量和散列尝试,表示为32元树。这些最初是由Phil Bagwell设计的,他与我在EPFL的团队一起工作,然后被Clojure采用,现在最终被Scala 2.8采用。 Scala实现与Clojure实现共享一个共同的根,但肯定不是它的一个端口。
对于问题的最后部分,我记得Rich Hickey在演示中提到Clojure数据结构已经移植到Scala。另外,Michael Fogus提到Scala 2.8计划在this interview中采用一些Clojure的数据结构。
对不起,这是如此短的细节......我不确定上述提到的斯卡拉2.8计划的状态是什么,但我记得瑞奇和迈克尔提到这一点,并认为这可能是一个有趣的事情,让你谷歌如果你有兴趣。
请看看丹尼尔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上都是持久的。还有其他的持久数据结构,但是它们涵盖了所有的主要用途,我不确定列举所有主要用途是否有意义。
这是否意味着HashMap的+方法是O(1)? – 2012-12-02 14:03:19
@MartinKonicek“Effective”O(1),这意味着一些假设必须保持为O(1)。查看集合[性能特征](http://docs.scala-lang.org/overviews/collections/performance-characteristics.html)文档。 – 2012-12-03 01:34:06
谢谢@Daniel C. Sobral! – 2012-12-03 15:04:27
- 1. 如何将持久数据结构“绑定”到Scala中的GUI?
- 2. Erlang持久数据结构
- 3. 使数据结构持久
- 4. Java中的持久数据结构
- 5. 持久与不可变数据结构
- 6. iOS非持久性数据结构
- 7. Magento结帐数据持久
- 8. Ruby中的树数据结构持久性
- 9. 如何使数据结构在C++中持久化?
- 10. 持久数据结构的高效批量修改
- 11. Swift中的持久数据
- 12. 序列化持久性/功能性数据结构
- 13. 是否有双向multimap持久数据结构?
- 14. 实现功能/持久性字典数据结构
- 15. FluentNHibernate和持久化的树结构
- 16. 数据持久性
- 17. 树结构和Java持久性2.0
- 18. Java servlet和持久性结构
- 19. Java:大型持久散列结构?
- 20. 在Java中完成类型化的持久数据结构a Clojure?
- 21. 数组中的数据不会持久
- 22. 持久的Firebase数据库
- 23. jqMobi的数据持久性
- 24. winform c的持久数据#
- 25. 关系数据库的高效永久数据结构
- 26. WinRT和持久化结构的字节数组?
- 27. Scrapy中的持久请求元数据
- 28. Silverlight中的MVVM数据持久性
- 29. PHP中的持久数据库连接
- 30. ASP.NET MVC中的持久模型数据
那么,我的理解是,“持久性”指的是更新不可变值的实现返回一个与原始值共享子结构的值,而不是完成一个完整的克隆。这可以为不可变集合提供接近可变对象的性能 - 您不需要复制10k个旧元素以添加一个新元素。 – 2010-06-24 10:33:56
我不认为数据共享(而不是复制)是通常使用的术语的持久性的先决条件。 (http://en.wikipedia.org/wiki/Persistent_data_structure) – 2010-06-24 19:52:54
我在http://akka.io/docs/akka/1.2/scala/stm.html发现了这一段: “Scala提供了所谓的持久数据结构它使得不可变集合的工作变得快速,它们是不可变的,但是可以随时访问和修改,它们使用结构共享,插入或更新不会破坏旧结构,因此“持久化”。数据结构目前由Map和Vector组成。“ - 根据这个答案我觉得有点不解。我可能只是误解了一些东西。 – 2011-10-31 11:23:46