GHC Partial Evaluation und Separate Compilation

8

Ganze Programmcompiler wie MLton erstellen optimierte Binärdateien, teilweise aufgrund ihrer Fähigkeit, die gesamte Quelle der Binärdatei für die teilweise Auswertung zu verwenden: aggressiv Konstanten einbinden und solange auswerten, bis sie hängen bleiben - alles während der Kompilierung!

Dies wurde ein wenig im Haskell-Raum von einem öffentlichen Verbündeten erkundet, von Gabriel Gonzalez Morte .

Jetzt verstehe ich, dass Haskell nicht viel davon tut - wenn überhaupt. Der erwähnte Grund, den ich verstehe, ist, dass es gegensätzliche Zusammenstellung ist. Dies ist sinnvoll, um eine partielle Bewertung über Quelldateigrenzen hinweg zu verbieten, aber es scheint, als ob eine partielle Auswertung in der Datei immer noch eine Option wäre.

Soweit ich weiß, wird die partielle Auswertung noch immer nicht durchgeführt.

Meine Frage ist: Ist das wahr? Wenn ja, was sind die Kompromisse für die Durchführung der partiellen Auswertung in der Datei? Wenn nicht, was ist eine Beispieldatei, in der man die kompilierte Leistung verbessern kann, indem man mehr Funktionalität in dieselbe Datei steckt?

(Edit: Um das oben Gesagte zu verdeutlichen, weiß ich, dass es eine Menge Fragen darüber gibt, was die besten Reduktionen sind - viele sind unentscheidbar! Ich würde gerne wissen, welche Kompromisse in einer "industriellen Stärke" gemacht werden. Compiler mit separater Kompilierung, die auf einer höheren Ebene als der Wahl der richtigen Gleichheitstheorie leben, wenn es interessante Dinge gibt, über die man sprechen kann Dinge wie Kompilierungsgeschwindigkeit oder Dateiaufblähung sind eher in dem Bereich, an dem ich interessiert bin könnte sein: "Warum kann MLton keine separate Kompilierung erhalten, indem jedes Modul einzeln kompiliert wird, die API offen gelassen wird und dann alle miteinander verknüpft werden?")

    
J. Abrahamson 21.11.2014, 17:48
quelle

1 Antwort

5

Dies ist definitiv eine Optimierung, die eine kleine Gruppe von Menschen interessiert und verfolgt. Der Google-Suchbegriff, um Informationen darüber zu finden, ist "Supercompilation". Ich glaube, dass im Moment mindestens zwei Ansätze im Umlauf sind.

Einer der großen Kompromisse scheint die Zeit der Kompilierung zu sein (Zeit und Speicher), und im Moment scheint die Leistung, diese Kosten zu bezahlen, etwas unvorhersehbar zu sein. Es gibt noch einiges zu tun. Ein paar Links:

Daniel Wagner 22.11.2014 06:23
quelle