Есть ли бесплатный переводчик OCaml-C?

Итак, у меня есть хороший код OCaml (50000 строк). Я хочу передать его на C. Так есть ли бесплатный переводчик OCaml в C?

Ответ 1

Это, вероятно, не то, что вы хотите, но вы можете заставить компилятор 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.

Ответ 2

Существует исполняемый файл байт-кода OCaml для компилятора исходного кода C: https://github.com/ocaml-bytes/ocamlcc

Итак, сначала скомпилируйте свой код в исполняемый файл байт-кода, затем используйте ocamlcc.

Ответ 3

Проект OCamlJS станет хорошей отправной точкой. Он компилирует OCaml в JavaScript; его можно было бы изменить, чтобы скомпилировать OCaml в ActionScript. Компиляция на C, вероятно, будет более эффективной - никакой сборки мусора любого рода - но не невозможно, особенно если Adobe Alchemy предоставляет API для удовлетворения некоторых из этих потребностей.

Ответ 4

Если бы у меня был какой-то код OCaml, я хотел запустить клиентский интерфейс "в браузере" (который, кажется, является вашим намерением на основе комментариев с вопросом), я должен сказать, что моя первая мысль заключалась в том, чтобы сделать один из

  • Используйте что-то вроде OcamlJava для компилировать OCaml в java байт-код и развертывание с использованием веб-запуска Java или похоже.
  • Порт в F # (версия Microsoft OCaml), работающий на .NET и использующий независимо от того, предоставляет ли MS веб-развертывание что.

И может быть, если бы я был действительно сумасшедшим:

  • Портируйте интерпретатор OCaml (который я считают, что это реализовано в "C" ) Вспышка, использующая Алхимия, и ее запустить байт-код OCaml моего исходного (непортированного) кода.

Двухэтапный OCaml-to-C, C-to-Flash на самом деле не привлекателен.