¿Tipos de sistemas que evitan las pérdidas de memoria relacionadas con la pereza?

10

Quizás la principal fuente de problemas de rendimiento en Haskell es cuando un programa sin darse cuenta acumula una cantidad de profundidad ilimitada, lo que provoca una pérdida de memoria y un desbordamiento potencial de la pila al evaluar. El ejemplo clásico se define sum = foldr (+) 0en Haskell.

¿Hay algún tipo de sistema que exija estáticamente la falta de tales thunks en un programa que usa un lenguaje perezoso?

Parece que esto debería estar en el mismo orden de dificultad que probar otras propiedades del programa estático usando extensiones de sistema de tipo, por ejemplo, algunos aspectos de seguridad de subprocesos o seguridad de memoria.

jkff
fuente

Respuestas:

4

La llamada de Levy por cálculo de valor push hace una distinción entre los valores y sus thunks. Para un valor vde tipo, tyel cálculo thunk vtiene tipo U ty. El lenguaje Frank de Lindley y McBride , inspirado en CBPV, también hace explícita esta distinción entre cálculos y valores, aunque a diferencia de Haskell, Frank es estricto.

Dominic Mulligan
fuente