Frage GHC Core als "Bytecode"?


Wie ich es verstehe, kompiliert GHC (der Glorious Glasgow Haskell Compiler) Haskell zu "Core" und kompiliert dann diesen Core in den Maschinencode. Wäre es überhaupt praktikabel, Haskell-Programme als GHC-Core zu verteilen, als wäre es "Bytecode"? Wäre eine solche Verteilung von Vorteil? Warum oder warum nicht?


16
2018-02-08 03:10


Ursprung


Antworten:


Dies wäre nicht praktisch; GHC Core ist nicht tragbar. Auf einer 32-Bit-Maschine wird beispielsweise eine 64-Bit-Arithmetik bis auf fremde Funktionsaufrufe im Core kompiliert, auf einer 64-Bit-Maschine jedoch mit nativer Maschinenwort-Arithmetik.

Noch wichtiger ist, GHC kann nicht wirklich lesen Ader; es kann es in ein paar Formaten ausdrucken, aber es gibt keinen eigentlichen Code, um irgendwelche dieser Formate wieder einzulesen. Ich bin mir nicht sicher, ob es ein großes Hindernis dabei geben würde, aber es ist die dokumentierte Situation seit vielen Jahren , also würde ich nicht erwarten, dass die Unterstützung bald erscheint.

Core ist Haskell im Allgemeinen auch ziemlich nah; Es ist nicht klar, was Sie kaufen würden, wenn Sie Code in dieser Form verteilen. Die Zeit, die benötigt wird, um Haskell in Core zu verwandeln, wird normalerweise kürzer sein als die Zeit, die benötigt wird, um Dinge wie das Endprogramm zu verknüpfen, so dass es normalerweise nicht viel Zeit beim Kompilieren spart.

Außerdem wird Core weniger überprüft als der Haskell-Quellcode (obwohl ich denke -dcore-lint würde dies mindern, und Sandboxing effektiv wäre schwierig (es gibt Safe Haskell, aber keinen Safe Core). Diese Nachteile treffen natürlich nicht zu, wenn die Quelle des Bytecodes vertrauenswürdig ist.

Im Grunde genommen ist GHC Core im Gegensatz zu den für diesen Zweck entwickelten portablen Bytecode-Formaten, wie Python-Bytecode und JVM, eine Zwischensprache des Compilers.

Als eine Randnotiz, GHC tut haben einen Bytecode-Interpreter, wie er von GHCi verwendet wird. Der dort verwendete Bytecode ist auch nicht portierbar, also gibt es keine Vorteile, die ich mir vorstellen kann, verglichen mit dem Maschinencode, den GHC im normalen Betrieb erzeugt.


20
2018-02-08 03:12