J’ai donc un bon code OCaml (50000 lignes). Je souhaite le porter sur C. Y a-t-il un traducteur OCaml en C gratuit?
Ce n’est probablement pas ce que vous voulez, mais vous pouvez demander au compilateur OCaml de vider son code d’exécution en C:
ocamlc -output-obj -o foo.c foo.ml
Ce que vous obtenez est essentiellement un vidage statique du bytecode. Le résultat ressemblera à quelque chose comme:
#include 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); }
Vous pouvez le comstackr avec
gcc -L/usr/lib/ocaml foo.c -lcamlrun -lm -lncurses
Pour plus d’informations, reportez-vous au manuel OCaml .
Il existe un fichier exécutable de bytecode OCaml dans le compilateur de code source C: https://github.com/ocaml-bytes/ocamlcc
Donc, commencez par comstackr votre code en un exécutable bytecode, puis utilisez ocamlcc.
Le projet OCamlJS serait un bon sharepoint départ. Il comstack OCaml en JavaScript; il devrait être possible de le modifier pour comstackr OCaml en ActionScript. Comstackr en C nécessiterait sans doute plus de travail – pas de récupération de place, mais pas impossible, surtout si Adobe Alchemy fournit des API pour répondre à certains de ces besoins.
Si j’avais du code OCaml que je voulais exécuter côté client “dans le navigateur” (ce qui semble être votre intention basée sur les commentaires avec la question), je dois dire que ma première pensée serait de faire l’une des choses suivantes:
Et peut-être que si j’étais vraiment fou:
Un OCaml-to-C et un C-to-Flash en deux étapes ne fait toutefois pas appel.