【问题标题】:Does F# Interpreter (fsi.exe) also produces Intermediate Language-Code as F# Compiler (fsc.exe) does?F# Interpreter (fsi.exe) 是否也像 F# Compiler (fsc.exe) 那样生成中间语言代码?
【发布时间】:2011-01-06 10:26:47
【问题描述】:

目前我正在为大学研究 F#。我对 F# 交互式控制台和 F# 编译器有疑问。

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

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

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

你怎么看,F#-interpreter 如何处理 F# 代码并翻译它?

您好, 马丁

【问题讨论】:

    标签: .net f# interpreter intermediate-language


    【解决方案1】:

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

    在为交互模式编译时,AbsIL usesSystem.Reflection.Emit 命名空间在运行时在内存中发出 IL,而 JIT 在执行代码时又将其编译为本机代码。

    【讨论】:

    • 对源代码的快速 grep 似乎表明 AbsIL 不使用 System.Reflection.Emit 而是直接将二进制文件生成到 .NET BinaryWriter 流。在某些地方,它似乎也使用了 bytes.fs 中定义的自定义 ByteBuffer。我相信这是因为最初 AbsIL 必须与 OCaml 交叉编译,但由于编译器被引导而不再使用它。
    • @Robert,看看我的帖子的第二个链接,你会看到它有一个 SRE 后端,如标题中所述:«Write Abstract IL structure at runtime using Reflection.Emit »
    • 另外,考虑到 fsi 触发的问题数量,并且仍在 Mono 的 SRE 实现中触发,我可以根据经验判断 :)
    • 我没有正确阅读您的答案:§,我以为您说它在运行时和编译时使用了 SRE。哦!
    猜你喜欢
    • 1970-01-01
    • 2018-09-08
    • 2019-08-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-20
    • 1970-01-01
    相关资源
    最近更新 更多