OCaml作为编译目标

OCaml作为编译目标,ocaml,code-generation,bytecode,portability,js-of-ocaml,Ocaml,Code Generation,Bytecode,Portability,Js Of Ocaml,我正在OCaml中实现符合ISO/IEC 13211-1:1995的Prolog系统 对于代码生成(又称JIT)第一部分 。。。生成实际的“.ml”代码 。。。使用ocamlopt 。。。并使用动态链接 该方法有些粗糙,但足以作为概念证明 最近,我突然想到编译成OCaml字节码可能是另一种选择1 因此,我的实际问题有两个: 如何将OCaml字节码编译为本机代码 是否有用于发射/处理字节码的OCaml库 1也是一个不错的选择,因为这将允许使用js_of_ocaml好吧,虽然从技术上讲,可以将

我正在OCaml中实现符合ISO/IEC 13211-1:1995的Prolog系统

对于代码生成(又称JIT)第一部分

  • 。。。生成实际的“.ml”代码
  • 。。。使用
    ocamlopt
  • 。。。并使用动态链接
该方法有些粗糙,但足以作为概念证明

最近,我突然想到编译成OCaml字节码可能是另一种选择1

因此,我的实际问题有两个:

  • 如何将OCaml字节码编译为本机代码

  • 是否有用于发射/处理字节码的OCaml库



  • 1也是一个不错的选择,因为这将允许使用
    js_of_ocaml

    好吧,虽然从技术上讲,可以将字节码编译成C,然后再编译成本机代码,例如,有一个,我建议不要使用字节码作为目标。首先,字节码不太稳定,而且没有文档记录。接下来,您会发现很难发出字节码,因为您将完成ocamlc编译器的工作。再次回到稳定性问题,您的项目将很快发生比特腐烂,维护起来会非常痛苦,因为对字节码的每一次更改都会破坏您的代码,您必须支持不同版本的多个分支,或者放弃对编译器旧版本的支持

    最后,通过选择合适的编译器,发出ml将为您提供同时使用字节码和nativecode的选择。您还可以使用js_of_ocaml或任何其他后端。此外,从历史上看,ML和OCaml是专门设计用来作为代码生成的目标的,特别是为了证明帮助的需要,例如参见Coq和F*,它们使用ML而不是字节码

    是否有用于发射/处理字节码的OCaml库


    编译器工具中有一些内部,我通常使用它作为引用实现(而不是缺少字节码的文档),参见文件夹,例如,这是.

    您可以考虑编写(或查找)到OcAML的绑定。我的猜测是,这不是一个很大的工作。发出ML代码显然是明智的选择。我还认为OCaml语言的稳定性是一个巨大的优势,但我的一部分也在尖叫“效率”。。。我想应该归咎于turbopascal3.0给我的印象:)效率是指编译代码所花的时间吗?它是否在工具的热路径上?