haskell中的固定长度循环缓冲区

Van*_*uel 9 haskell

我想在Haskell中创建一些常规类型的固定长度循环缓冲区.缓冲区中的项目需要在物理内存(非链接列表)中一个接一个地定位.我想要这个特定的结构,因为它将提高所有数据一起到达CPU上的L2缓存的机会.我已经了解了Haskell如何允许新的数据类型,但是看起来使用"数据"创建的类型更多的是使用模式匹配和相关方法来美化c结构.是否有可能在Haskell中完全创建如上所述的低级数据结构.

scl*_*clv 10

您需要一个类似于数组的可变结构,并且您特别需要一个未装箱的结构,以便底层数组不仅存储指向数据的指针,还存储项目本身.

标准数组库中的Data.Array为您提供了一个版本,但是矢量库中提供了特别高性能的数组:http://hackage.haskell.org/package/vector

矢量库,如ByteString,Text和其他一些,在引擎盖下使用了相当数量的低级ghc特定基元.要使用该库,您不必自己担心这些问题.但是如果您认为图书馆没有提供您所需要的内容,那么您也可以通过阅读其源代码自己学习相当多的技巧和技巧.

  • Data.Vector的另一个不错的功能是将`Data.Vector.Storable`数组传递给C库相对简单. (4认同)

jas*_*vdj 8

是的,这当然是可能的.从Real World Haskell 创建bloom过滤器的章节应该是这类实现的一个很好的例子.