2011-01-06 3 views
7

Derzeit mache ich eine Recherche für die Universität über F #. Ich habe eine Frage zu der F # interaktiven Konsole und dem F # -Compiler.Erzeugt F # Interpreter (fsi.exe) auch Intermediate Language-Code, wie es F # Compiler (fsc.exe) tut?

Der F # -Compiler erzeugt MSIL-Code (Microsoft Intermediate Language) beim Kompilieren von F # -Quelle. Dies wird dann vom JIT-Compiler in Maschinencode übersetzt, wenn das geschriebene Programm ausgeführt wird.

Aber was macht die F # Interpreter Console? Gibt es auch Line-per-Line übersetzt den F # Code in MSIL, und JIT dann in Maschinencode? Oder übersetzt es den F # -Code direkt in Maschinencode?

Wenn es zuerst in IL konvertiert wird, dann wird es wahrscheinlich einen IL-Interpreter geben, weil der JIT-Compiler nur komplette Programme kompiliert. Nicht wahr?

Was denken Sie, wie F # -interpreter F # -Code behandelt und übersetzt?

Grüße, Martin

Antwort

13

Der F # -Compiler gibt IL AbsIL seine eigene Bibliothek. AbsIL ist ein weiteres MSR-Projekt, das von F # absorbiert wurde.

Wenn für den interaktiven Modus AbsIL uses des System.Reflection.Emit Namensraum Kompilieren zur Laufzeit emittieren IL im Speicher, was wiederum durch den JIT zu nativem Code kompiliert, wie es den Code ausführt.

+0

Ein schneller grep der Quelle scheint darauf hinzuweisen, dass AbsIL System.Reflection.Emit nicht verwendet, sondern eine Binärdatei direkt in einen .NET BinaryWriter-Stream generiert. An einigen Stellen scheint es auch einen benutzerdefinierten ByteBuffer zu verwenden, der in bytes.fs definiert ist. Ich glaube, das liegt daran, dass AbsIL ursprünglich mit OCaml kompilieren musste, sich aber davon entfernt hat, da der Compiler boot-burp ist. – Robert

+1

@Robert, werfen Sie einen Blick auf den zweiten Link meines Beitrags, Sie sehen, dass es ein SRE-Backend hat, wie in der Überschrift angegeben: «Schreiben abstrakte IL-Strukturen zur Laufzeit mit Reflection.Emit» –

+0

Auch unter Berücksichtigung der Anzahl von Problemen, die FSI ausgelöst, und löst immer noch in Monos Umsetzung von SRE, kann ich durch Erfahrung sagen :) –