2010-04-14 26 views
10

Güzel OCaml kodum var (50000 satır). Ben C'ye taşımak istiyorum. Yani C çevirmene herhangi bir ücretsiz OCaml var mı?C çevirmene ait herhangi bir ücretsiz OCaml var mı?

+2

Bunu neden yapmak istersiniz? Eminim ne yapıyorsan onu yapmanın daha iyi yolları vardır. – tiftik

+0

Oh ... Hayır başka yolu yok ... (elle bir tane var ama onu halledelim) Adobe Flash player için Adobe Alchemy adında bir araç kullanarak derlemek için C koduna ihtiyacım var. 200x hız kaybı ama çelik saf ActionScript derlenmiş koddan daha hızlı olacaktır ... Ana Fikir - web sayfası içinde bir uygulama çalışması yavaş olsa bile ... – Rella

cevap

9

Bu muhtemelen ne istediğinizi değil, ancak OCaml derleyici C çalışma zamanı kodunu dökümü alabilirsiniz: Ne elde temelde baytkoduna statik çöplük

ocamlc -output-obj -o foo.c foo.ml 

. Sen the OCaml manual Daha fazla bilgi için,

gcc -L/usr/lib/ocaml foo.c -lcamlrun -lm -lncurses 

ile derlemek olabilir

#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); 
} 

: benzer bir sonuç elde edecektir.

+0

ve bu kodu C derleyicisi (gcc) kullanarak derleyebilirsiniz ex) için? – Rella

+0

Elbette, neden olmasın? Bilgi eklendi. –

+0

Grate, ancak şimdi, örneğin, OCaml kitaplığımdan C işlevlerini nasıl çağırırım?(OCaml kütüphanesini C'den çağırmak için tedavi yöntemini biliyorum fakat portu kullanabilmem için sadece OCaml lib'inin C'ye eklenmesini değil, C'den fonksiyonlarını çağırabilmem gerekir.) – Rella

3

OCamlJS projesi iyi bir başlangıç ​​noktası olacaktır. OCaml'i JavaScript’e derler; OCaml 'i ActionScript'i derlemek için değiştirmek mümkün olmalıdır. C'ye derleme yapmak muhtemelen daha fazla iş olacaktır - özellikle de herhangi bir çeşit çöp toplanması yok - ama imkansız değil, özellikle Adobe Alchemy bu ihtiyaçların bir kısmını karşılamak için API'ler sağlıyorsa.

3

Bazı OCaml kodlarına sahip olsaydım, istemci tarafında "tarayıcıda" çalıştırmak istedim (ki bu da soruyla ilgili yorumlara dayanıyormuş gibi görünüyor), ilk düşüncemden biri olduğunu söylemeliyim. için OcamlJava gibi

  • Kullanım şey java baytkoduna OCaml derlemek ve Java web başlatmak veya benzer kullanarak bu dağıtın.
  • Bağlantı Noktası F # (Microsoft sürümü, OCaml). NET'te çalışan ve Web-deploy için ne sağlarsa kullanın kullanın.

Ve gerçekten deli olduğunu belki:

  • Liman Alchemy kullanarak Flash (I 'C' uygulanan inan ) ve ait OCaml baytkodu çalıştırdığınız OCaml tercüman orijinal (sınırsız) kodum.

İki aşamalı bir OCaml-to-C, C-to-Flash, gerçekten de çekici değil.

İlgili konular