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.

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.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.