OCaml 字节码的可移植性

Portability of OCaml bytecode

我在 x86 机器上用字节码编译 OCaml 程序,然后将字节码传输到 ppc64 机器上。假设 ppc64 机器有 ocamlrun(为 ppc64 编译),我能在 ppc64 架构上执行我的程序吗?就这么简单吗?

换句话说,字节码是否具有字节序?

如果不是,那么字节码的用途是什么?

我假设您不需要任何外部函数;否则你当然需要提供它们的二进制代码。

是的,对于 Ocaml 支持的系统,字节码不受字节顺序(和字长)的影响。

(但是,您的字节码可能取决于特定版本的 ocamlrun 解释器和程序使用的 Pervasives 模块;因此,Ocaml 4.01 的字节码可能不会运行 在 Ocaml 4.02 中 运行time 或反之亦然;YMMV)

特别是当您从 its source code, it is compiling itself with a distributed version (in boot/ subdirectory 构建 Ocaml 时 ...) of ocamlc - 这是一个字节码文件。

Ocaml 人员非常需要这种可移植性,因为大多数 Ocaml 编译器都是用 Ocaml 本身编写的,并且是 bootstrapped.

另请参阅 J.Pitrat 在 meta-bugs, curse of the bootstrap 上的博客,它间接解释了为什么更新 boot/ocamlc 文件必须由 Ocaml 团队很少且小心地完成。在 Ocaml 代码中,make bootstrap 必须偶尔且非常小心地完成(至少要提交更新版本的 boot/ocamlc 字节码文件)。