7
目前我正在爲F#大學做一個研究。我有一個關於F#交互式控制檯和F#編譯器的問題。F#解釋器(fsi.exe)是否也生成中間語言代碼,如F#編譯器(fsc.exe)所做的那樣?
F#編譯器在編譯F#源時會生成Microsoft中間語言(MSIL)代碼。然後在執行寫入的程序時,由JIT編譯器將其轉換爲機器代碼。
但是,F#解釋器控制檯有什麼作用?它是否還將每行的F#代碼轉換爲MSIL,然後將其轉換爲機器代碼?或者它是否將F#代碼直接轉換爲機器代碼?
如果它先將它轉換爲IL,那麼我認爲可能會有一個IL解釋器,因爲JIT編譯器只編譯完整的程序。不是嗎?
您如何看待F#解釋器如何處理F#代碼並將其轉換?
問候, 馬丁
快速grep的源代碼似乎表明AbsIL不使用System.Reflection.Emit,但直接生成二進制.NET BinaryWriter流的二進制文件。在某些地方,它似乎也使用在bytes.fs中定義的自定義ByterBuffer。我相信這是因爲最初AbsIL必須與OCaml進行交叉編譯,但在編譯器啓動時已經離開了。 – Robert 2011-01-07 12:54:58