【问题标题】:functional programming: immutable data structure efficiency函数式编程:不可变的数据结构效率
【发布时间】:2009-11-02 00:21:44
【问题描述】:

我不明白,FP 编译器如何使处理不可变数据结构的代码快速,而不是炸毁堆栈等。

例如,在树中插入操作,它必须在添加新节点之前复制整个树并返回复制的树,而命令式的对手只需要添加一个指向新节点的指针。如果插入操作运行数百万次,则会占用大量内存,并且当树更大时,复制会越来越慢。 FP 编译器实际上是如何优化这个的?

【问题讨论】:

    标签: functional-programming


    【解决方案1】:

    您不必复制整个树来进行更改;您可以共享大部分结构。参见例如this blogthis talk 中的图表,作者 Rich Hickey 在 Clojure 上(请参阅大约一半的哈希尝试讨论)。

    【讨论】:

    • 图表博客链接已失效,如果您能找到其他链接,请更新您的答案,谢谢!
    【解决方案2】:

    编译器不会真正优化它,这是您在编码时必须专门针对它进行编程的东西。出色的纯功能数据结构 (book, thesis) 中解释了执行此操作的技术。

    【讨论】:

      【解决方案3】:

      【讨论】:

        【解决方案4】:

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

        【讨论】:

        • 请问为什么不赞成这个答案?假设我想通过一些修改来移动相同的集合并保持功能正常,知道 GC 将收集那些不再使用的部分是否会有所帮助?
        • 它没有以任何方式回答这个问题。
        猜你喜欢
        • 1970-01-01
        • 2014-03-22
        • 2023-04-02
        • 1970-01-01
        • 1970-01-01
        • 2016-04-22
        • 1970-01-01
        • 2014-02-22
        • 1970-01-01
        相关资源
        最近更新 更多