2010-04-14 4 views
10

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?

+2

Dlaczego chcesz to zrobić? Jestem pewien, że istnieją lepsze sposoby robienia tego, co robisz. – tiftik

+0

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

Odpowiedz

9

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.

+0

i możesz skompilować ten kod używając kompilatora C (gcc dla ex)? – Rella

+0

Jasne, czemu nie? Informacje dodane powyżej. –

+0

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

3

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.

3

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.