Typsysteme, die faulen Speicherlecks verhindern?

10

Möglicherweise liegt die Hauptursache für Leistungsprobleme in Haskell darin, dass ein Programm versehentlich einen Teil unbegrenzter Tiefe aufbaut. Dies führt sowohl zu einem Speicherverlust als auch zu einem möglichen Stapelüberlauf bei der Auswertung. Das klassische Beispiel ist die Definition sum = foldr (+) 0in Haskell.

Gibt es Typsysteme, die das Fehlen solcher Thunks in einem Programm mit einer faulen Sprache statisch erzwingen?

Dies scheint in der gleichen Größenordnung zu liegen wie der Nachweis anderer statischer Programmeigenschaften mithilfe von Typsystemerweiterungen, z. B. einige Varianten der Thread- oder Speichersicherheit.

jkff
quelle

Antworten:

4

Levys Aufruf durch Push-Wert- Berechnung unterscheidet zwischen Werten und ihren Thunks. Für einen Wert vvom Typ hat tydie Berechnung thunk vden Typ U ty. Die von CBPV inspirierte Frank- Sprache von Lindley und McBride macht diese Unterscheidung zwischen Berechnungen und Werten ebenfalls deutlich, obwohl Frank im Gegensatz zu Haskell streng ist.

Dominic Mulligan
quelle