2010-04-14 10 views
10

तो मेरे पास अच्छा ओकैमल कोड (50000 लाइनें) है। मैं इसे सी को बंद करना चाहता हूं तो क्या सी अनुवादक के लिए कोई मुफ्त ओकैम है?सी अनुवादक के लिए कोई मुफ्त ओकैमल है?

+2

आप ऐसा क्यों करना चाहते हैं? मुझे यकीन है कि आप जो भी कर रहे हैं उसे करने के बेहतर तरीके हैं। – tiftik

+0

ओह ... कोई अन्य तरीके नहीं हैं ... (हाथ से एक है लेकिन चलो इसे छोड़ दें) मुझे Adobe कोड के लिए एडोब कीमिया नामक कुछ टूल का उपयोग करके इसे संकलित करने के लिए सी कोड की आवश्यकता है ... तो मुझे 10- 200x स्पीड लॉस लेकिन यह स्टील शुद्ध एक्शनस्क्रिप्ट से संकलित कोड से तेज़ होगा ... मुख्य आइडिया - वेब पेज के अंदर एक एप्लिकेशन चलाएं, भले ही इसमें धीमा हो ... – Rella

उत्तर

9

यह शायद आप क्या चाहते हैं नहीं है, लेकिन आप OCaml संकलक सी में अपने क्रम कोड डंप करने के लिए प्राप्त कर सकते हैं:

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

क्या आप प्राप्त मूल रूप से बाईटकोड की एक स्थिर डंप है। आप

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

साथ यह संकलन कर सकते हैं अधिक जानकारी के लिए the OCaml manual देख

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

: परिणाम कुछ ऐसी दिखाई देगी।

+0

और आप सी कंपाइलर (जीसीसी) का उपयोग करके इस कोड को संकलित कर सकते हैं पूर्व के लिए)? – Rella

+0

ज़रूर, क्यों नहीं? जानकारी ऊपर जोड़ा गया। –

+0

गेट, लेकिन उदाहरण के लिए अब सी से मेरी ओकैम लाइब्रेरी से कॉल फ़ंक्शन कैसे करें?(मुझे सी से OCaml लाइब्रेरी को कॉल करने का कैपेरा तरीका पता है, लेकिन इसे बंद करने के लिए मुझे केवल सी में ओकैमल lib को घोंसला करने में सक्षम होना चाहिए, लेकिन सी से अपने कार्यों को कॉल करने में सक्षम होना चाहिए) – Rella

3

OCamlJS प्रोजेक्ट एक अच्छा प्रारंभिक बिंदु होगा। यह ओकैमल को जावास्क्रिप्ट में संकलित करता है; ओकैमल को एक्शनस्क्रिप्ट में संकलित करने के लिए इसे संशोधित करना संभव होना चाहिए। सी से संकलन शायद अधिक काम होगा - किसी भी प्रकार का कचरा संग्रह नहीं - लेकिन असंभव नहीं, खासकर यदि एडोब कीमिया उन आवश्यकताओं में से कुछ को पूरा करने के लिए एपीआई प्रदान करता है।

3

अगर मेरे पास कुछ ओकैमल कोड था तो मैं क्लाइंट-साइड "ब्राउज़र में" चलाने के लिए चाहता था (जो कि प्रश्न के साथ टिप्पणियों के आधार पर आपका इरादा प्रतीत होता है), मुझे कहना है कि मेरा पहला विचार एक करना होगा को OcamlJava तरह

  • कुछ उपयोग जावा बाईटकोड को OCaml संकलन और कि का उपयोग कर जावा वेब शुरू करने या समान तैनात।
  • पोर्ट टू एफ # ( ओसीएमएल का माइक्रोसॉफ्ट संस्करण) .NET पर चल रहा है और का उपयोग करें जो भी एमएस वेब-तैनाती को प्रदान करता है।

और शायद अगर मैं सच में पागल था:

  • पोर्ट OCaml दुभाषिया फ्लैश करने के लिए (जो मैं 'सी' में विश्वास करते हैं कार्यान्वित किया जाता है) कीमिया का उपयोग कर और यह की OCaml बाईटकोड चलाने मेरा मूल (असमर्थित) कोड।

दो चरण ओकैम-टू-सी, सी-टू-फ्लैश वास्तव में अपील नहीं करता है।

4

सी स्रोत कोड संकलक के लिए एक OCaml बाईटकोड निष्पादन योग्य फ़ाइल है: https://github.com/ocaml-bytes/ocamlcc

तो, पहले तो ocamlcc का प्रयोग कर एक बाईटकोड निष्पादन के लिए अपने कोड संकलन।

संबंधित मुद्दे