拉链在实践中的表现如何,何时使用?

时间:2010-03-28 03:05:10

标签: performance data-structures functional-programming memory-management zipper

我认为zipper是个好主意;它优雅地提供了一种方法来遍历列表或树,并以功能的方式显示本地更新。

渐近地,成本似乎是合理的。但遍历数据结构需要在每次迭代时进行内存分配,其中正常的列表或树遍历只是指针追逐。这看起来很昂贵(如果我错了,请纠正我。)

费用是否过高?在什么情况下使用拉链是合理的?

1 个答案:

答案 0 :(得分:27)

我可以提供一个可靠的数据点:John Dias和我有paper in the 2005 ML Workshop我们将使用拉链表示控制流图的成本与使用Objective Caml中的可变记录字段的成本进行比较。我们非常惊喜地发现,使用基于拉链的控制流图的编译器的性能实际上略好于使用传统数据结构的性能,该传统数据结构具有通过指针链接的可变记录。我们找不到严谨的分析工具来告诉我们为什么拉链更快,但我怀疑原因是维护的不变量较少,因此指针分配相对较少。优化器也足够聪明,可以分摊拉链产生的一些分配成本。在任何情况下,拉链都可以在优化编译器中使用,并且实际上有轻微的性能好处