我想在Haskell中创建一些常规类型的固定长度循环缓冲区。缓冲区中的项目需要在物理内存(非链接列表)中一个接一个地定位。我想要这个特定的结构,因为它将提高所有数据一起到达CPU上的L2缓存的机会。我已经了解了Haskell如何允许新的数据类型,但是看起来使用“数据”创建的类型更多的是使用模式匹配和相关方法来美化c结构。是否有可能在Haskell中完全创建如上所述的低级数据结构。
答案 0 :(得分:10)
你想要一个类似于数组的可变结构,并且你特别想要一个 unboxed 结构,以便底层数组不仅存储指向数据的指针,而且存储项目本身。
标准数组库中的Data.Array为您提供了一个版本,但是矢量库中提供了特别高性能的数组:http://hackage.haskell.org/package/vector
矢量库,如ByteString,Text和其他几个,在引擎盖下使用了相当数量的低级ghc特定基元。要使用该库,您不必自己担心这些问题。但是,如果您认为图书馆没有提供您所需要的内容,那么您也可以通过阅读其源代码来学习相当多的技巧和技巧。
答案 1 :(得分:8)
是的,这肯定是可能的。来自creating a bloom filter的Real World Haskell章应该是这类实现的一个很好的例子。