2

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

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

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

这种方法有些粗糙,但作为概念验证已经足够好了。

最近,我想到编译为 OCaml 字节码可能是一种替代方法1

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

  1. 如何将 OCaml 字节码编译为本机代码?

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


1 还有一个不错的,因为这将允许使用js_of_ocaml.

4

1 回答 1

2

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

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

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

编译器工具有一些内部工具,我通常将其用作参考实现(而不是缺少的字节码文档),请参阅工具文件夹,例如,这是字节码反汇编程序。

于 2020-06-08T14:10:01.600 回答