.net F#解释器(fsi.exe)是否也像F#编译器(fsc.exe)那样生成中间语言代码?

.net F#解释器(fsi.exe)是否也像F#编译器(fsc.exe)那样生成中间语言代码?,.net,f#,interpreter,intermediate-language,.net,F#,Interpreter,Intermediate Language,目前我正在为大学做一个关于F#的记录。我有一个关于F#交互控制台和F#编译器的问题 F#编译器在编译F#源代码时生成Microsoft中间语言(MSIL)代码。然后,在执行编写的程序时,JIT编译器将其转换为机器代码 但是F#解释器控制台做什么呢?它是否也会逐行将F#代码转换为MSIL,然后将其JIT转换为机器代码?还是将F代码直接翻译成机器代码 如果它首先将其转换为IL,那么我认为可能会有一个IL解释器,因为JIT编译器只编译完整的程序。不是吗 你认为呢,F#解释器是如何处理F#代码并进行翻译

目前我正在为大学做一个关于F#的记录。我有一个关于F#交互控制台和F#编译器的问题

F#编译器在编译F#源代码时生成Microsoft中间语言(MSIL)代码。然后,在执行编写的程序时,JIT编译器将其转换为机器代码

但是F#解释器控制台做什么呢?它是否也会逐行将F#代码转换为MSIL,然后将其JIT转换为机器代码?还是将F代码直接翻译成机器代码

如果它首先将其转换为IL,那么我认为可能会有一个IL解释器,因为JIT编译器只编译完整的程序。不是吗

你认为呢,F#解释器是如何处理F#代码并进行翻译的

您好, Martin

F#编译器使用自己的库发出IL。AbsIL是另一个被F#吸收的MSR项目


在为交互模式编译时,在运行时在内存中发出IL的命名空间,JIT在执行代码时将其编译为本机代码。

源代码的快速grep似乎表明AbsIL不使用System.Reflection.emit,而是直接向.NET BinaryWriter流生成二进制文件。在某些地方,它似乎也使用了在bytes.fs中定义的自定义ByterBuffer。我相信这是因为最初AbsIL必须与OCaml交叉编译,但由于编译器是自启动的,所以已经改变了这种做法。@Robert,看看我文章的第二个链接,你会看到它有一个SRE后端,如标题中所述:«使用反射在运行时编写抽象IL结构。Emit»也,考虑到fsi触发的问题的数量,并且在Mono的SRE实现中仍在触发,我可以从经验中看出:)我没有正确阅读您的答案:§,我以为您说它在运行时和编译时使用SRE。哦!