Quiero crear un búfer circular de longitud fija de algún tipo general en Haskell. Los elementos en el búfer deben ubicarse uno después del otro en la memoria física (no en la lista vinculada). Quiero esta estructura específica porque mejorará las posibilidades de que todos los datos lleguen juntos a la caché L2 en la CPU. He leído acerca de cómo Haskell permite nuevos tipos de datos, sin embargo, parece que los tipos creados con "datos" son un poco más que glorificados con la coincidencia de patrones y los métodos asociados. ¿Es posible crear estructuras de datos de bajo nivel como la descrita anteriormente completamente en Haskell?búfer circular de longitud fija en haskell
Respuesta
Desea una estructura tipo matriz mutable, y desea particularmente un sin caja uno para que la matriz subyacente almacene no solo punteros a sus datos, sino también los elementos.
Data.Array de la biblioteca matriz estándar le da una versión de eso, pero en especial las matrices de alto rendimiento están disponibles en la biblioteca de vectores: http://hackage.haskell.org/package/vector
La biblioteca de vectores, como ByteString, texto, y algunos otros , usa una buena cantidad de primitivos específicos de ghc de bajo nivel debajo del capó. Para usar la biblioteca, no debe preocuparse por esas cosas usted mismo. Pero si decide que la biblioteca no le proporciona lo que necesita, entonces también puede aprender una cantidad justa de trucos y técnicas leyendo su código fuente.
Otra buena característica de Data.Vector es que es relativamente simple pasar matrices 'Data.Vector.Storable' a una biblioteca C. –
ver el paquete de hackage 'vector-buffer'. – vivian
Sí, esto es ciertamente posible. El capítulo creating a bloom filter de Real World Haskell debería ser un muy buen ejemplo para este tipo de implementaciones.
- 1. GetPrivateProfileString - Longitud de búfer
- 2. enteros grandes con longitud fija
- 3. ¿Cómo convertir una cadena binaria de 16 bits de longitud fija a una de longitud fija?
- 4. Python Tipo de datos para una FIFO de longitud fija
- 5. División de cadena por longitud fija
- 6. un archivo de texto en el búfer circular pitón
- 7. Django: CharField con longitud fija, ¿cómo?
- 8. ¿Cómo codigo un búfer circular entero simple en C/C++?
- 9. Haskell y cadena de longitud
- 10. Dividir una cadena de JavaScript en piezas de longitud fija
- 11. ¿Usando Scrum en proyectos de longitud fija/precio fijo?
- 12. ¿Cómo declarar una cadena de longitud fija en VB.NET?
- 13. Buffer circular en Flash
- 14. Código hash numérico de longitud fija de cadena de longitud variable en C#
- 15. ¿Cómo implementar un búfer circular usando un archivo?
- 16. Biblioteca .NET para archivos de texto de longitud fija
- 17. MYSQL VARCHAR o CHAR para cadena de longitud fija
- 18. la conversión de un número binario con una longitud fija
- 19. MySQL de longitud fija y tipos de datos de longitud variable
- 20. Learning Haskell: Programa aparentemente circular - Por favor ayuda a explicar
- 21. Serialización binaria para listas de longitud indefinida en Haskell
- 22. Escribir una cadena en una matriz de bytes de longitud fija en C#
- 23. Almacenar objetos de Python en una lista de Python vs. una matriz Numpy de longitud fija
- 24. ¿Cómo creo una matriz mutable de longitud fija de objetos de Python en Cython?
- 25. Algoritmo simplificado para calcular el espacio restante en un búfer circular
- 26. Impresión de datos en bruto a una salida hexadecimal de longitud fija
- 27. ¿Cómo generar un identificador único de una longitud fija en Java?
- 28. Cómo convertir un entero a cadena hexagonal de longitud fija en C#?
- 29. cómo analizar una lista o una cadena en trozos de longitud fija
- 30. Problema de almacenamiento en búfer de InputStreamReader
Es difícil tener un razonamiento de bajo nivel en Haskell. En mi humilde opinión, es mejor usar C para las tareas en las que desea exprimir las últimas gotas de rendimiento. – fuz
Me pregunto cómo se compararía [Data.Sequence] (http://hackage.haskell.org/packages/archive/containers/latest/doc/html/Data-Sequence.html) con dicha estructura de datos. –
jaspervdj, sclv, Dan Burton, gracias por las respuestas. No estoy seguro de cuál es la mejor respuesta hasta ahora, pero investigaré todo lo que ustedes sugirieron. Gracias de nuevo. –