pigrizia completo è stato repeatedly demonstrated a cause space leaks.Perché la piena pigrizia è un'ottimizzazione predefinita?
Perché è piena la pigrizia da -O
in poi? Non sono convinto dal ragionamento in SP2 The Implementation of Functional Programming Languages. L'affermazione è che in
f = \y -> y + sqrt 4
sqrt 4
è inutilmente ripetuto ogni volta f
viene immesso quindi dovremmo galleggiare fuori lambda. Sono d'accordo nel piccolo, ma poiché abbiamo visto quali problemi questa trasformazione causa nel grande non credo che ne valga la pena. Mi sembra che i vantaggi di questa trasformazione siano ottenibili unilateralmente ** con solo modifiche al codice locale e i programmatori che lo desiderano dovrebbero implementarlo a mano.
Mi puoi convincere del contrario? full-laziness
è davvero utile? Sarò particolarmente convinto se riuscirai a fornire esempi che per attuare a mano richiedono una cooperazione multilaterale o trasformazioni non locali.
** a differenza di ottimizzazioni come inline e la fusione torrente che implementare manualmente richiederebbe la cooperazione multilaterale tra i moduli e il codice non-locale cambia
La trasformazione della "pigrizia totale" in realtà non ha nulla a che fare con l'ordine di valutazione. –