我想在Haskell中创建一个通用类型的定长循环缓冲区。缓冲区中的项需要在物理内存(非链表)中一个接一个地定位。我想要这种特定的结构,因为它将提高所有数据一起进入CPU上的L2缓存的机会。我读过关于Haskell如何允许新的数据类型的文章,但是看起来使用" data“创建的类型比使用模式匹配和相关方法美化的c结构要多一些。有没有可能在Haskell中完全创建像上面描述的那样的低级数据结构。
发布于 2011-06-29 01:53:17
您想要一个可变的类似数组的结构,并且特别想要一个未装箱的结构,以便底层数组不仅存储指向数据的指针,还存储项本身。
标准数组库中的Data.Array为您提供了一个版本,但特别是向量库中提供了高性能的数组:http://hackage.haskell.org/package/vector
向量库,如ByteString、Text和其他一些库,在底层使用了大量低级ghc特定的原语。如果只是使用这个库,你不应该自己去担心这些事情。但是如果你认为这个库不能满足你的需要,那么你也可以通过自己阅读它的源代码来学到相当多的技巧和技术。
发布于 2011-06-29 01:13:29
是的,这当然是可能的。Real World Haskell中的creating a bloom filter一章应该是这类实现的一个很好的例子。
https://stackoverflow.com/questions/6510175
复制相似问题