Sistemas de tipos que evitam vazamentos de memória relacionados à preguiça?

10

Talvez a principal fonte de problemas de desempenho em Haskell seja quando um programa cria inadvertidamente um thunk de profundidade ilimitada - isso causa um vazamento de memória e um potencial estouro de pilha ao avaliar. O exemplo clássico está definindo sum = foldr (+) 0em Haskell.

Existe algum tipo de sistema que imponha estaticamente a falta desses thunks em um programa usando uma linguagem lenta?

Parece que isso deve estar na mesma ordem de dificuldade que provar outras propriedades estáticas do programa usando extensões de sistema de tipos, por exemplo, alguns tipos de segurança de thread ou de memória.

jkff
fonte

Respostas:

4

A chamada de Levy pelo cálculo do valor push faz uma distinção entre valores e seus thunks. Para um valor vdo tipo, tya computação thunk vtem tipo U ty. A linguagem Frank de Lindley e McBride , inspirada no CBPV, também torna explícita essa distinção entre cálculos e valores, embora, ao contrário de Haskell, Frank seja rigoroso.

Dominic Mulligan
fonte