【发布时间】:2011-06-28 16:52:49
【问题描述】:
我想在 Haskell 中创建一些通用类型的固定长度的循环缓冲区。缓冲区中的项目需要在物理内存(不是链表)中一个接一个地定位。我想要这个特定的结构,因为它会提高所有数据一起进入 CPU 上的二级缓存的机会。我已经阅读了有关 Haskell 如何允许新数据类型的信息,但是看起来使用“数据”创建的类型与使用模式匹配和相关方法美化的 c 结构差不多。是否有可能完全在 Haskell 中创建像上面描述的那样的低级数据结构。
【问题讨论】:
-
在 Haskell 中很难进行低级推理。恕我直言,最好将 C 用于您想要挤出最后一滴性能的任务。
-
我想知道Data.Sequence 与这样的数据结构相比如何。
-
@Dan Burton:奇怪的是,我不久前测试过这个。使用 Data.Sequence 通常是性能最好的选项,并且(非常令人惊讶)通常优于未装箱的可变数组。即使在病态的情况下(从序列中间进行大量读取),性能也不会比可变缓冲区差多少。我对这个结果感到非常惊讶,我仍然不确定我是否相信它,但我认为我在测试中没有犯任何错误。
-
@John L:你应该写一篇关于你的发现的博文。我,一方面,会读它。
-
@Dan Burton:完成。 johnlato.blogspot.com/2011/07/circular-buffers.html
标签: haskell