OCaml作为编译目标

问题描述 投票:1回答:1

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

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

  • ...生成实际的“ .ml”代码,...
  • ...用ocamlopt编译,...
  • ...并使用动态链接。

这种方法虽然有些粗糙,但作为概念证明还是足够的。

最近,在我看来,编译为OCaml字节码可以是另一种选择[[1。

所以我的实际问题有两个:

  1. 如何将OCaml字节码编译为本机代码?
  2. 是否有OCaml库用于发出/处理字节码?


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

ocaml code-generation bytecode portability js-of-ocaml
1个回答
1
投票
嗯,虽然从技术上讲可以将字节码编译为C,然后编译为本地代码,例如,有一个project doing this,但我建议不要将字节码用作目标。首先,字节码不稳定,没有文档记录。接下来,您将发现发出字节码更加困难,因为您将进行ocamlc编译器的工作。再一次,回到稳定性问题,您的项目将非常快速地运转,并且将非常痛苦地维护,因为对字节码的每次更改都会破坏您的代码,并且您将必须支持不同版本的多个分支或放弃对较旧版本的支持。版本的编译器。

最后,发出ml将使您选择仅选择适当的编译器来使用字节码和本机代码。您还可以使用js_of_ocaml或任何其他后端。同样,从历史上看,ML和OCaml专门设计为代码生成的目标,尤其是出于证明帮助的需要,例如,请参见Coq和F *,它们使用ML而不是字节码。

是否有OCaml库用于发出/处理字节码?

[我通常使用编译器工具的一些内部组件作为参考实现(而不是缺少字节码的文档),请参见tools文件夹,例如,这是bytecode disassembler

© www.soinside.com 2019 - 2024. All rights reserved.