2009-11-02 66 views
18

我不明白,FP编译器怎么能有不可变的数据结构处理速度快,不炸掉堆栈中的代码等函数式编程:一成不变的数据结构效率

例如,插入操作树,它有在添加新节点并返回复制的树之前复制整个树,而不需要将指针添加到新节点的命令式couterpart。如果插入操作运行数百万次,则会占用大量内存,并且树越大,复制越慢。 FP编译器如何实际优化这个?

回答

15

您不必复制整棵树来进行更改;你可以分享大部分的结构。见例如Rich Hickey在Clojure上的this blogthis talk中的图表(请参阅关于中途散列尝试的讨论)。

+0

http://en.wikipedia.org/wiki/Hash_array_mapped_trie – 2013-01-04 02:31:05

+0

http://en.wikipedia.org/wiki/Persistent_data_structure – 2013-01-04 12:20:40

+0

图博客链接已死,如果你可以找到另一个链接,请更新你的答案,谢谢! – 2014-06-11 21:50:06

7

编译器不会真的优化它,它是编码时必须编程的东西。在优秀的纯功能数据结构(book,thesis)中解释了这样做的技术。

-4

如果垃圾收集器正在完成其工作,那么旧数据结构的副本在不再使用时将被收回。

+0

我可以问为什么对这个答案进行投票?假设我想通过一些修改来移动相同的集合并保持功能正常,那么知道GC将收集那些不再使用的部分是不是有帮助? – 2011-02-25 03:01:54

+1

它不以任何方式回答问题。 – 2011-09-03 15:38:38