Ist GHC in der Lage, IO-Aktionen zu optimieren?

8

Führt GHC standardmäßig eine Tail-Call-Optimierung für die folgende Funktion durch? Das einzig Seltsame daran ist, dass es eine IO-Aktion rekursiv definiert, aber ich sehe nicht, warum das nicht TCO'd sein könnte.

%Vor%     
Geoff 27.04.2009, 03:22
quelle

1 Antwort

24

Da Ihr Code äquivalent zu

ist %Vor%

Der Aufruf findet tatsächlich nicht in der Endposition statt. Wenn Sie jedoch ghc -O ausführen und das Optimierungsprogramm einschalten, zeigt Ihnen die Option -ddump-simpl die Ausgabe des GHC-Zwischencodes an, und sie optimiert sich tatsächlich zu einer tail-rekursiven Funktion, die zu einer Schleife kompiliert wird.

>

Die Antwort lautet also: GHC wird dies standardmäßig nicht optimieren; Sie benötigen die Option -O .

(Experimente mit GHC Version 6.10.1.)

    
Norman Ramsey 27.04.2009, 04:34
quelle

Tags und Links