Digitare sistemi che impediscono perdite di memoria legate alla pigrizia?


10

Forse la principale fonte di problemi di prestazioni in Haskell è quando un programma crea inavvertitamente un thunk di profondità illimitata - questo provoca sia una perdita di memoria che un potenziale overflow dello stack durante la valutazione. L'esempio classico sta definendo sum = foldr (+) 0in Haskell.

Esistono sistemi di tipo che impongono staticamente la mancanza di tali thunk in un programma usando un linguaggio pigro?

Sembra che questo dovrebbe avere lo stesso ordine di difficoltà rispetto alla dimostrazione di altre proprietà del programma statico utilizzando estensioni di sistema di tipo, ad esempio alcuni tipi di sicurezza dei thread o di memoria.

Risposte:


4

La chiamata di Levy mediante il calcolo del valore push fa una distinzione tra valori e i loro thunk. Per un valore vdi tipo tyil calcolo thunk vha tipo U ty. Anche il linguaggio Frank di Lindley e McBride , ispirato al CBPV, rende esplicita questa distinzione tra calcoli e valori, sebbene a differenza di Haskell, Frank sia rigoroso.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.