haskell / haskell/binary

get for UArray blows the heap for large arrays

Abierto
#34 1 comentario 0 reacciones 0 asignados Ver en GitHub
Lenguaje dominante
Haskell
Estrellas
120
Forks
70
Métricas de merge de PR
Sin PR fusionados en 30 d

Descripción

``` haskell
instance (Binary i, Ix i, Binary e, IArray UArray e) => Binary (UArray i e) where
get = do
bs <- get
n <- get
xs <- getMany n
return (listArray bs xs)
```

getMany is fully strict in the list, since it uses an accumulator and reverses it at the end. The intermediate xs list can be huge in cases where the eventual UArray is much more manageable (eg 28M Booleans).

Two questions:

1) Is there a known alternative for (un)serializing UArrays to(from) disk? Such an alternative would make this Issue far less important.

2) Have you considered a version that serializes the bytes directly? I drafted one up; it's tremendously more efficient, though I'm concerned about robustness wrt endianness etc. Furthermore, it requires a base monad that can mutate arrays, which requires an "unsafe" invocation. And lastly it's not portable, using ghc-prim.

HTH. Thanks.

Guía de contribución

No hay ninguna guía de contribución indexada para este repositorio

Línea de trabajo

Comienza con la instancia get de Binary (UArray i e) y su ruta getMany, reproduciendo la decodificación de un Boolean UArray grande para medir el uso de memoria de la lista intermedia. Revisa el enfoque direct-byte propuesto frente a endianness, mutabilidad, portabilidad de ghc-prim y las alternativas de serialización en disco. Se considera terminado cuando haya un alcance acordado y una ruta de serialización de UArray probada que evite el crecimiento descontrolado del heap.

Escrito por el modelo de indexación a partir del texto del issue.

Evaluación

Stack tecnológico
haskell
Área
data
Tipo de issue
Error
Dificultad
5/5
Tiempo estimado
Más de una semana
Estado de actividad
Estancado
Claridad
Necesita aclaración
Aptitud para principiantes
25/100

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.