Jenis sistem yang mencegah kebocoran memori terkait kemalasan?

10

Mungkin sumber utama masalah kinerja di Haskell adalah ketika sebuah program secara tidak sengaja membangun sebongkah kedalaman tak terbatas - ini menyebabkan kebocoran kehabisan memori dan potensi stack overflow saat mengevaluasi. Contoh klasik didefinisikan sum = foldr (+) 0dalam Haskell.

Apakah ada sistem tipe yang secara statis memberlakukan kurangnya pemogokan dalam program menggunakan bahasa malas?

Sepertinya ini harus berada pada urutan kesulitan yang sama dengan membuktikan properti program statis lainnya menggunakan ekstensi sistem tipe, misalnya beberapa rasa keamanan benang atau keamanan memori.

Jkff
sumber

Jawaban:

4

Panggilan Levy dengan kalkulus nilai push membuat perbedaan antara nilai-nilai dan hal-hal buruknya. Untuk nilai vtipe typerhitungan thunk vmemiliki tipe U ty. Bahasa Frank Lindley dan McBride , yang diilhami oleh CBPV, juga membuat perbedaan antara perhitungan dan nilai-nilai ini eksplisit, meskipun tidak seperti Haskell, Frank ketat.

Dominic Mulligan
sumber