我想在Haskell中創建一些通用類型的固定長度循環緩衝區。緩衝區中的項目需要在物理內存(而不是鏈接列表)中一個接一個地定位。我想要這個特定的結構,因爲它可以提高所有數據一起到達CPU上L2緩存的機會。我已經閱讀了Haskell如何允許新的數據類型,但是它看起來像使用「數據」創建的類型更像是具有模式匹配和相關方法的榮耀的c結構。是否有可能在Haskell中完全創建如上所述的低級數據結構。haskell中的固定長度循環緩衝區
回答
你想要一個可變數組結構,並且你特別想要一個unboxed之一,以便底層數組不僅存儲指向你的數據的指針,而且存儲項目本身。
從標準陣列庫Data.Array給你一個版本是,但尤其是高性能的陣列可從載體文庫:http://hackage.haskell.org/package/vector
的矢量圖庫,像字節串,文本,和其他幾個人在引擎蓋下使用了相當數量的低級ghc特有的基元。要只使用這個庫,你不應該自己擔心這些事情。但是如果你決定圖書館沒有給你你需要的東西,那麼你也可以通過閱讀它的源代碼爲自己學習相當數量的技巧和技巧。
Data.Vector另一個不錯的特性是將'Data.Vector.Storable'數組傳遞給C庫相對簡單。 –
參見hackage軟件包'vector-buffer'。 – vivian
是的,這當然是可以的。 Real World Haskell的章節creating a bloom filter應該是這些類型實現的一個很好的例子。
- 1. O(1)haskell中的循環緩衝區?
- 2. 如何設計一個固定的時間長度循環緩衝區?
- 3. 緩衝區溢出緩衝區長度
- 4. 將數據放入一個固定長度的緩衝區中
- 5. 寫一個固定長度的緩衝區與偏移量
- 6. XmlReader從固定長度的緩衝區讀取
- 7. 將未知長度的緩衝區複製到C中的固定大小緩衝區中
- 8. WDF EvtIoDeviceControl緩衝區長度
- 9. GetPrivateProfileString - 緩衝區長度
- 10. 高效循環緩衝區?
- 11. 循環緩衝區優化
- 12. 逆循環緩衝區
- 13. 縮小循環緩衝區
- 14. 循環緩衝區「requestBufferSize:couchbase
- 15. ActionScript3中的循環視頻緩衝區
- 16. Java中的循環緩衝區?
- 17. VB.NET中的循環緩衝區
- 18. Simulink中的循環緩衝區
- 19. 協議緩衝區:無固定大小緩衝區的符號?
- 20. 如何定義固定大小的boost循環緩衝區作爲類成員?
- 21. sendto的最大緩衝區長度?
- 22. 調整AudioUnit緩衝區的長度
- 23. 實現具有頭部和尾部指針的固定長度緩衝區
- 24. 爲什麼我的環形緩衝區/循環緩衝區在java打破?
- 25. 使用SQL的循環緩衝區
- 26. 矢量的循環緩衝區
- 27. 循環緩衝區的線程安全
- 28. 如何增加MySQL緩衝區長度?
- 29. Nightmare.js截圖緩衝區長度0
- 30. 文檔長度不等於緩衝區
在Haskell中很難進行低級推理。恕我直言,最好使用C來完成最後一滴性能的任務。 – fuz
我想知道[Data.Sequence](http://hackage.haskell.org/packages/archive/containers/latest/doc/html/Data-Sequence.html)如何與這樣的數據結構進行比較。 –
jaspervdj,sclv,Dan Burton,謝謝你的回答。我不確定什麼是最好的答案,但我會研究你們建議的一切。再次感謝。 –