Wpisz systemy zapobiegające wyciekom pamięci związanym z lenistwem?

10

Być może głównym źródłem problemów z wydajnością w Haskell jest przypadek, gdy program nieumyślnie tworzy masę nieograniczonej głębokości - powoduje to wyciek pamięci i potencjalne przepełnienie stosu podczas oceny. Klasycznym przykładem jest definiowanie sum = foldr (+) 0w Haskell.

Czy są jakieś systemy typów, które statycznie wymuszają brak takich udarów w programie używającym leniwego języka?

Wygląda na to, że poziom trudności powinien być taki sam, jak w przypadku innych właściwości programu statycznego przy użyciu rozszerzeń systemu typów, np. Niektórych odmian bezpieczeństwa wątków lub bezpieczeństwa pamięci.

jkff
źródło

Odpowiedzi:

4

Wezwanie Levy'ego przez rachunek wartości wypychania rozróżnia wartości od ich wartości. Dla wartości vtypu tyobliczenia thunk vmają typ U ty. Język Franka Lindleya i McBride'a , zainspirowany CBPV, również wyraźnie rozróżnia obliczenia i wartości, choć w przeciwieństwie do Haskella, Frank jest ścisły.

Dominic Mulligan
źródło