2010-04-24 5 views
6

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

(मैं जानता हूँ कि wxHaskell तरह जीयूआई पुस्तकालयों देखते हैं कि, लेकिन एक बस विदेशी भाषा में अपने आवेदन तर्क के एक हिस्से को करना चाहते थे लगता है।)

या यह एक भयानक विचार है?

+0

http://mldonkey.sourceforge.net/Main_Page – grettke

+0

http://coherentpdf.com/blog/?tag=ocaml – grettke

+0

कैविट (http://www-list.cea.fr/labos/gb/LSL/ caveat/index.html) गंभीर रूप से सी ++ में लिखे गए महत्वपूर्ण एम्बेडेड सी के लिए एक सत्यापन उपकरण है, लेकिन ओसीएमएल को एक स्क्रिप्टिंग भाषा के रूप में उपयोग करता है (एक इंटरैक्टिव सत्र के दौरान उत्पन्न एक कैमल जर्नल को संकलित किया जा सकता है और किसी भी समय कैविट को फिर से चलाने के लिए जोड़ा जा सकता है) । –

उत्तर

3

मैं हैकेल के बाहर बुलाए गए हैंकेल साझा libs संकलित करके इसका व्यापक उपयोग करता हूं।

आमतौर पर कार्य शामिल होगा

  1. उचित विदेशी निर्यात घोषणाओं बनाने के लिए
  2. किसी भी डेटाटाइप्स आप मार्शल करने के लिए
  3. भाषा में सी संरचनाओं संरचना बनाने के (या जरूरत के लिए Storable उदाहरण बना आप इस जानकारी को पढ़ने के लिए उपयोग कर रहे हैं
  4. क्योंकि मैं मैन्युअल रूप से हैकेल आरटीएस को प्रारंभ नहीं करना चाहता हूं, मैं lib में खुद को प्रारंभ/समाप्ति कोड जोड़ता हूं। (यूनिक्स पर विंडोज़ __attribute__ ((कन्स्ट्रक्टर) में dllmain)
  5. क्योंकि मुझे अब उनमें से किसी की आवश्यकता नहीं है, इसलिए मैं निर्यात तालिका (विंडोज़)
  6. में होने से सभी बंद और आरटीएस कार्यों को छिपाने के लिए एक .def फ़ाइल बना सकता हूं।
  7. सब कुछ एक साथ संकलित करने के लिए जीएचसी का उपयोग करें

ये कार्य रोबोट और संरचित हैं, एक बिंदु पर आप उन्हें स्वचालित करने के लिए कुछ लिख सकते हैं। वास्तव में यह करने के लिए मैं अपने आप का उपयोग करता हूं, यह एक उपकरण है जिसे मैंने बनाया है जो आपके द्वारा निर्यात किए जाने वाले कार्यों पर निर्भरता का पता लगाता है, और यह आपको सीपी/सी ++ में घोषणाएं देने के साथ-साथ साझा लिब को संकलित करेगा।

उपकरण यहाँ उपलब्ध है http://hackage.haskell.org/package/Hs2lib-0.4.8

5

अच्छा, मुख्य जोखिम यह है कि सुविधाओं के अस्तित्व में रहते हुए, उनका अच्छी तरह से परीक्षण नहीं किया जाता है - बहुत से ऐप्स ऐसा नहीं करते हैं। तुम बहुत सी से हास्केल बुला मुसीबत नहीं करना चाहिए था, बहुत आसान लग रहा है:

http://www.haskell.org/haskellwiki/Calling_Haskell_from_C

अगर वहाँ सामने अंत के लिए C उपयोग करने के लिए (उदाहरण के लिए आप लेगेसी एप्लिकेशन है) कुछ सम्मोहक कारण है मैं कहेंगे और आपको वास्तव में एक हास्केल लाइब्रेरी की आवश्यकता है, या किसी अन्य कारण से हास्केल का उपयोग करना चाहते हैं, फिर, हाँ, इसके लिए जाएं। मुख्य जोखिम यह है कि बहुत से लोग ऐसा नहीं करते हैं, इसलिए अन्य तरीकों को कॉल करने के बजाय कम दस्तावेज और उदाहरण।

4

साथ ही आप (the manual देखें) सी में OCaml एम्बेड कर सकते हैं, हालांकि यह जैसा कि आमतौर पर सी

2

साथ OCaml विस्तार के रूप में किया नहीं है या यह एक भयानक विचार है?

यह बिल्कुल एक भयानक विचार नहीं है। लेकिन डॉन स्टीवर्ट के नोट्स के रूप में, यह शायद एक कमजोर रास्ता है। आप निश्चित रूप से अपने प्रोग्राम को हास्केल या ओकैमल के रूप में लॉन्च कर सकते हैं, फिर यह शुरुआती गेट — से बाहर एक विदेशी-फ़ंक्शन कॉल करें और मैं आपको अपने कोड को — पर व्यवस्थित करने की सलाह देता हूं लेकिन यह इस तथ्य को नहीं बदलेगा कि बहुत से लोग कॉल करते हैं Haskell से सी से Haskell में सी से। इसी प्रकार ओकैमल के लिए।

4
(दुर्भाग्य से, इस उपकरण अभी तक नहीं hackage पर, कुछ मैं अभी भी ठीक करने और बहुत अधिक का परीक्षण इससे पहले कि मैं आराम से ऐसा करने से कर रहा हूँ की जरूरत है क्योंकि वहाँ है)

मेरा मानना ​​है कि सबसे अच्छा तरीका, भले ही दोनों जीयूआई और तर्क दोनों एक ही भाषा में लिखे गए हों, दो प्रक्रियाओं को चलाने के लिए है जो मानव-पठनीय, पाठ-आधारित प्रोटोकॉल (किसी प्रकार का डीएसएल) के माध्यम से संचार करता है। यह वास्तुकला आपके मामले पर भी लागू होती है।

लाभ स्पष्ट हैं: जीयूआई अलग करने योग्य और बदलने योग्य है, स्वचालित परीक्षण आसान हैं, लॉगिंग और डिबगिंग बहुत आसान है।

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

  • कोई संबंधित समस्या नहीं^_^