Lassen Sie uns sagen, dass wir ein Programm wie dieses:Referenz-Transparenz Mit to-Pre Rechenwerte in Haskell
list = [1..10000000]
main = print $ sum list
Ich will das so zusammengestellt werden, dass die ausführbare Datei nur 50000005000000 druckt, ohne so viel Zeit zu nehmen und Anstrengung.
Grundsätzlich jeder Ausdruck, der (hier hilft vielleicht die Strikt Analyse kann) kann sicher berechnet wird seine vorausberechneten während der Kompilierung (dh wir verwenden Referenztransparenz zu sagen, dass es nicht wirklich wichtig macht, wenn wir berechnen der Wert).
Kurz: „muss berechnet werden“ + Referenztransparenz = vorausberechnet
Das ist wie läuft das Programm würde werden können, bis wir etwas, das auf dem Eingang hängt getroffen (dh der Kern das Programm, das, was über alle Eingänge gemeinsam ist, wird im Voraus berechnet werden)
gibt es zur Zeit() in Haskell oder einer anderen Sprache dieses ein bestehender Mechanismus zu erreichen? [Bitte nicht zu so etwas wie Vorlagen in C++, da es nicht referenzielle Transparenz in erster Linie hat.]
Wenn nicht, wie hart dieses Problem? [Was sind die begleitenden technischen (und theoretisch) Fragen?]
dies war kein Anwendungsfall :), irgendwie können Sie Code eingeben, da ich mit LLVM nicht vertraut bin und gerne sehen würde, wie weit ich es für die Vorberechnung strecken kann – Karan
@Karan Es ist getan. –
Kannst du kurz erklären, warum ghc hier für Vektoren optimiert werden kann und nicht für Listen? (Und wenn llvm der Grund für diese Magie ist, können wir diese Art von Logik von dort zu ghc ausleihen?) – Karan