Mam więc ładny kod OCaml (50000 linii). Chcę przenieść go do C. Czy jest jakiś darmowy translator OCaml na C?Czy jest jakiś darmowy translator OCaml na C?
Odpowiedz
To prawdopodobnie nie jest to, co chcesz, ale można dostać kompilator OCaml zrzucić swój kod wykonania w C:
ocamlc -output-obj -o foo.c foo.ml
Co masz jest w zasadzie statyczna zrzut kodu bajtowego. Wynik będzie wyglądać następująco:
#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);
}
Można go skompilować z
gcc -L/usr/lib/ocaml foo.c -lcamlrun -lm -lncurses
Aby uzyskać więcej informacji, zobacz the OCaml manual.
i możesz skompilować ten kod używając kompilatora C (gcc dla ex)? – Rella
Jasne, czemu nie? Informacje dodane powyżej. –
Ruszt, ale jak teraz na przykład funkcje wywołania z mojej biblioteki OCaml z C?(Wiem, w jaki sposób wywołać bibliotekę OCaml z C, ale aby ją przenieść, muszę mieć możliwość nie tylko zagnieżdżenia biblioteki OCaml w C, ale także możliwość wywołania jej funkcji z C) – Rella
Projekt OCamlJS byłby dobrym punktem wyjścia. Kompiluje OCaml do JavaScript; powinno być możliwe zmodyfikowanie go, aby skompilować OCaml do ActionScript. Kompilacja do C prawdopodobnie zapewniłaby więcej pracy - bez zbędnego zbierania śmieci - ale nie jest niemożliwa, szczególnie, jeśli Adobe Alchemy zapewnia interfejsy API, aby spełnić niektóre z tych potrzeb.
Gdybym miał kod OCaml, chciałbym uruchomić stronę kliencką "w przeglądarce" (co wydaje się być twoim intencją na podstawie komentarzy z pytaniem), muszę powiedzieć, że moją pierwszą myślą byłoby zrobienie jednego z
- Zastosowanie coś OcamlJava do skompilować SML Java kodu bajtowego i wdrożyć że używanie rozpocząć Java Web lub podobne.
- Port do F # (wersja Microsoft: OCaml) działający na platformie .NET i używający , niezależnie od tego, co MS zapewnia na potrzeby wdrożenia sieci, .
A może gdybym był naprawdę szalony:
- Port interpreter OCaml (co uważam, że jest realizowany w 'C') do Flash przy użyciu Alchemy i go uruchomić kodu bajtowego OCaml od mój oryginalny (nieopublikowany) kod.
Dwustopniowy OCaml-to-C, C-to Flash nie jest jednak atrakcyjny.
Jest kod bajtowy plik wykonywalny OCaml do kodu źródłowego kompilatora C: https://github.com/ocaml-bytes/ocamlcc
Więc najpierw skompilować kod do pliku wykonywalnego kodu bajtowego następnie użyć ocamlcc.
Dlaczego chcesz to zrobić? Jestem pewien, że istnieją lepsze sposoby robienia tego, co robisz. – tiftik
Oh ... Nie ma innych sposobów ... (ręcznie, ale skaczmy) Potrzebuję kodu C, aby skompilować go za pomocą jakiegoś narzędzia o nazwie Adobe Alchemy dla odtwarzacza Adobe Flash ... Więc dostanę 10- 200-krotna utrata prędkości, ale stal będzie szybsza niż kod skompilowany z czystego ActionScript ... Główna idea - spraw, aby aplikacja działała na stronie internetowej, nawet jeśli jest spowolniona ... – Rella