有免费的OCaml到C翻译吗?

时间:2010-04-14 15:22:53

标签: c++ c ocaml

所以我有很好的OCaml代码(50000行)。我想把它移植到C.那么有没有免费的OCaml到C翻译器?

4 个答案:

答案 0 :(得分:10)

这可能不是您想要的,但您可以让OCaml编译器将其运行时代码转储到C:

ocamlc -output-obj -o foo.c foo.ml

你得到的基本上是字节码的静态转储。结果将类似于:

#include <caml/mlvalues.h>
CAMLextern void caml_startup_code(
           code_t code, asize_t code_size,
           char *data, asize_t data_size,
           char *section_table, asize_t section_table_size,
           char **argv);
static int caml_code[] = {
0x00000054, 0x000003df, 0x00000029, 0x0000002a, 0x00000001, 0x00000000, 
/* ... */
}

static char caml_data[] = {
132, 149, 166, 190, 0, 0, 3, 153, 0, 0, 0, 118, 
/* ... */
};

static char caml_sections[] = {
132, 149, 166, 190, 0, 0, 21, 203, 0, 0, 0, 117, 
/* ... */
};

/* ... */

void caml_startup(char ** argv)
{
    caml_startup_code(caml_code, sizeof(caml_code),
                      caml_data, sizeof(caml_data),
                      caml_sections, sizeof(caml_sections),
                      argv);
}

您可以使用

进行编译
gcc -L/usr/lib/ocaml foo.c -lcamlrun -lm -lncurses

有关详细信息,请参阅the OCaml manual

答案 1 :(得分:4)

C源代码编译器有一个OCaml字节码可执行文件: https://github.com/ocaml-bytes/ocamlcc

因此,首先将代码编译为字节码可执行文件然后使用 ocamlcc。

答案 2 :(得分:3)

OCamlJS项目将是一个很好的起点。它将OCaml编译为JavaScript;应该可以修改它以将OCaml编译为ActionScript。编译为C可能会更多的工作 - 没有任何类型的垃圾收集 - 但并非不可能,特别是如果Adobe Alchemy提供API来满足其中一些需求。

答案 3 :(得分:3)

如果我有一些OCaml代码,我想在浏览器中运行客户端(这似乎是基于对问题的评论的意图),我不得不说我的第一个想法是做一个< / p>

  • 使用OcamlJava之类的内容 将OCaml编译为java字节码和 使用Java web start或部署它 类似。
  • 端口到F#(Microsoft版本的 OCaml)在.NET上运行并使用 无论MS为Web部署提供什么 这一点。

也许如果我真的疯了:

  • 移植OCaml解释器(我 相信是在“C”中实现的 使用Alchemy进行Flash并让它运行 我原始(未移植)代码的OCaml字节码。

两级OCaml-to-C,C-to-Flash虽然不具吸引力。