Это, вероятно, не то, что вам нужно, но вы можете заставить компилятор 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
Для получения дополнительной информации см. руководство OCaml .
Проект OCamlJS будет хорошей отправной точкой. Он компилирует OCaml в JavaScript; должно быть возможно модифицировать его для компиляции OCaml в ActionScript. Компиляция на C, вероятно, будет более трудоемкой - никакой сборки мусора - но не невозможной, особенно если Adobe Alchemy предоставит API для удовлетворения некоторых из этих потребностей.
Если бы у меня был какой-то код OCaml, который я хотел бы запустить на стороне клиента «в браузере» (что, по-видимому, является вашим намерением, основываясь на комментариях к вопросу), я должен сказать, что моей первой мыслью было бы выполнить одно из
И, может быть, если бы я был действительно сумасшедшим:
Двухступенчатый OCaml-to-C, C-to-Flash не особо привлекает.