2009-08-15 13 views
11

मुझे ओकैमल के साथ अनुभव है। आपको उन सभी कार्यों के लिए एक स्टब लिखना था जिन्हें आप उपयोग करना चाहते थे, यहां तक ​​कि सी int < -> OCaml int। लिंकिंग एक अच्छी तरह से दर्दनाक था। मैं सी ++ ऑब्जेक्ट्स मैपिंग के बारे में भी बात नहीं करना चाहता हूं।सी/सी ++ के साथ कितनी उच्च स्तरीय भाषाएं आसानी से इंटरफेस की जाती हैं?

अन्य लोकप्रिय भाषाओं के बारे में क्या? क्या यह हमेशा दर्द होता है?

संपादित करें:

कृपया से बचने के डुप्लिकेट। और राज्य सी और सी ++ अलग-अलग क्षमताओं को इंटरफेसिंग करते हैं।

संपादित करें 2:

कृपया स्पष्टता से। "एक्स सी कॉल कर सकता है" बहुत अधिक जानकारी नहीं देता है।

+2

यह उच्च स्तर की भाषा नहीं है लेकिन एएसएम इंटरफेस सी और सी ++ के साथ वास्तव में अच्छा है! :-)। दूसरी सलाह जो मैं आपको दे सकता हूं वह यह है कि जब आपको अपने पायथन कोड के साथ सी/सी ++ कोड को जोड़ने में बहुत अधिक परेशानी होती है तो आप हमेशा अपने सी/सी ++ कोड का एक अच्छा डीएलएल बना सकते हैं। कुछ लोगों को भी COM dlls पसंद है। – toto

+1

सी ++ ** ** उच्च भाषा है, घटना यह ** आसान नहीं है ** एक – Artyom

उत्तर

7

लगभग सभी स्क्रिप्टिंग भाषाओं (पर्ल, पायथन, लुआ, PHP, रूबी, टीसीएल) का उद्देश्य सी और सी ++ में एम्बेड किया जाना है।

एपीआई के रिश्तेदार गुण का एक अच्छा सर्वेक्षण कागज:

H. Muhammad and R. Ierusalimschy. C APIs in extension 
and extensible languages. Journal of Universal Computer 
Science, 13(6):839–853, 2007. 

भी देखें इस very similar question (और my answer in particular;))।

+0

मुझे सिंटैक्स हाइलाइटिंग पसंद है :) – Skilldrick

+0

स्किलड्रिक: मैं भी। मुझे आश्चर्य है कि ऐसा क्यों करता है: http://meta.stackexchange.com/questions/14664/how-does-so-syntax-highlight-citations-so-well –

+0

-1: "सी और सी ++ में एम्बेड करने के लिए डिज़ाइन किया गया है। " सभी उद्धृत भाषाओं के लिए झूठा है (जैसा कि, यह सत्य नहीं है) लेकिन लुआ। केवल लुआ को इसके लिए डिजाइन किया गया था, अन्य अनुकूलन संभव हैं। ऐसी भाषा को एम्बेड करने की प्रक्रिया में काफी अंतर है जिसे एक भाषा को एम्बेडेड और एम्बेड करने के लिए डिज़ाइन किया गया है जो कि यह प्राथमिक डिजाइन उद्देश्य नहीं था। – Klaim

15

पायथन के पास बहुत अच्छा सी एपीआई है। इसे पाइथन सी एपीआई के लिए बूस्ट :: पायथन सी ++ बाइंडिंग का उपयोग करके सी ++ में भी आसानी से और आसानी से एकीकृत किया जा सकता है।

+1

आपको ctypes मॉड्यूल और http://docs.python.org/extending/extending.html – Novelocrat

0

सी ++ ऑब्जेक्ट्स के साथ इंटरफेसिंग हमेशा दर्दनाक होगा, क्योंकि कोई मानक एबीआई (बाइनरी इंटरफ़ेस) नहीं है।

+0

ठीक होना चाहिए। मुझे लगता है कि आप आभासी कार्यों के बारे में बात कर रहे हैं। आप उनके बिना बहुत कुछ कर सकते हैं। –

+0

जब तक आप इंटरफ़ेस का उपयोग करते हैं, कॉलिंग सम्मेलनों, लेआउट इत्यादि के साथ सौदों के बजाय आपको प्रोग्राम करने के लिए, प्रोग्रामर, ऐसा करने के लिए, यह ठीक होना चाहिए। – Novelocrat

+0

यदि आप ईएलएफ के साथ इंटरफेस कर सकते हैं तो आप अपेक्षाकृत आसानी से सी ++ ऑब्जेक्ट्स के साथ इंटरफेस करने में सक्षम होना चाहिए। – Imagist

3

पायथन में अंतर्निहित सीटीपीएस मॉड्यूल का उपयोग करके एक महान सी इंटरफ़ेस है। सी ++ मॉड्यूल इंटरफ़ेस करने के लिए, SWIG का उपयोग किया जा सकता है।

8

मुख्यधारा की भाषाओं और उनके सी इंटरफेस के बीच आनंद की विभिन्न डिग्री उपलब्ध हैं। खुशी से, आप उनमें से अधिकांश के लिए SWIG का उपयोग कर सकते हैं।

3

अजगर उच्च स्तर की भाषा सीखने के लिए एक शक्तिशाली और आसान है और सी और सी के साथ ++ यह विस्तार की अच्छी प्रलेखन है:

http://docs.python.org/extending/extending.html

का उपयोग करते हुए इस दृष्टिकोण सरल है, लेकिन आप अपने एक्सटेंशन स्पष्ट लिखते हैं पायथन के लिए। SWIG का उपयोग करना (एक अच्छा छोटा ट्यूटोरियल के लिए Extending Python with C++ देखें), आप सी/सी ++ कोड बनाते हैं जैसे कि इसे स्वयं से चलाया जाना चाहिए और एक इंटरफ़ेस फ़ाइल जिसे SWIG आपके लिए कुछ रैपिंग कोड बनाने के लिए लेता है जिसे आप पाइथन (या अन्य बातों, उस मामले के लिए)।

+1

बूस्ट नहीं है। पाइथन इन दिनों और अधिक चीज़ माना जाता है? – KayEss

2

जावा के पास जेएनआई के साथ एक अच्छा देशी इंटरफ़ेस है, सी # में कुछ समान है।

+2

जेएनआई बहुत अच्छा है ... जेएनए – dfa

+0

कोशिश करें ओह, क्षमा करें अगर जेएनआई अब 'इन' चीज नहीं है; आखिरी बार जावा होने के बाद से 8 साल हो गए हैं: पी –

+0

क्या आप अधिक specyfic हो सकता है? –

0

मैंने फ़ोरट्रान पुस्तकालयों को एक बार में जोड़ा। मैं आपको और बता दूंगा, लेकिन यह मेरे झपकी के लिए समय है।

0

Tcl C/C कॉल कर सकते हैं ++ कोड

3

आप विभिन्न विदेशी समारोह इंटरफेस के बारे में इस recent comp.compilers thread पसंद कर सकते हैं। यह सुझाव दिया गया था कि हास्केल में सबसे अच्छे में से एक था।

1

Ddesigned आसानी से सी

को

डी 2.0 intefaced जा करने के लिए है एक limited interface सेल्सियस तक ++ कोड है।

1

R इस R Extensions Manual में वर्णन किया गया और योगदान Rcpp पैकेज यह आसान सी ++ कार्यों कॉल करने के लिए बनाता है, सी, सी ++ और फोरट्रान के माध्यम से एक्स्टेंसिबल है।

5

यह समस्या 20 से अधिक वर्षों से महत्वपूर्ण रही है। इसे हल करने में कला की स्थिति इंटरफ़ेस परिभाषा भाषा या आईडीएल परिभाषित करना है। फिर आपके पास एक ऐसा उपकरण है जो स्वचालित रूप से उन कार्यों को उत्पन्न करता है जिन्हें आप हाथ से लिखने के लिए उपयोग करते थे। सामान्य उपयोग में अन्य शब्द विदेशी-फ़ंक्शन इंटरफ़ेस या FFI है।

दुर्भाग्यवश, उनमें से अधिकतर बहुत अच्छे नहीं हैं। व्यक्तिगत अनुभव से:

  • टोलुआ और एसडब्ल्यूआईजी लुआ और सी के लिए उपयोग करने योग्य नहीं हैं; बाध्यकारी कार्यों को हाथ से लिखना आसान है। विशेष रूप से tolua के लिए आईडीएल लगभग सी हैडर फ़ाइल नहीं है, इसलिए आप प्रत्येक घोषणा के दो संस्करणों को बनाए रखने के लिए हवादार हैं।

  • tolua ++ बाध्यकारी लुआ और सी ++ — बाध्यकारी के लिए उपयोग करने योग्य हो सकता है हाथ से सी ++ वस्तुओं को अनुकरण करने का उपद्रव मूल्य काफी है।

  • एसडब्ल्यूआईजी कई भाषाओं को कवर करता है, लेकिन मुझे हमेशा इसका उपयोग करना मुश्किल लगता है।

अन्य लोगों के अनुभव के बारे में पढ़ से:

  • Glasgow Haskell Compiler सबसे अच्छा विदेशी समारोह इंटरफेस हो रहा है, और अगर मैं सही ढंग से याद करते हैं, आईडीएल gratifyingly सरल है: तुम सिर्फ हास्केल देना उस सी फ़ंक्शन का प्रकार जिसे आप आयात करने का प्रयास कर रहे हैं।

  • Standard ML of New Jersey में एक बहुत अच्छा विदेशी-फ़ंक्शन इंटरफ़ेस भी लगता है; इसके बारे में बेबेल -01 में एक पेपर था।

किसी भी भाषा आप सी के साथ interoperate के लिए, आप विदेशी समारोह इंटरफ़ेस के बारे में पूछना चाहिए और यदि कोई आईडीएल और जुड़े उपकरणों है पूछो।

+0

एसडब्ल्यूआईजी दर्द हो सकता है, लेकिन इसे केवल एक बार सीखने का लाभ है। –

0

सी (और विस्तार सी ++ द्वारा) लूआ की एकीकरण क्षमताओं बिल्कुल प्रथम श्रेणी है। यह भी एक अद्भुत छोटी भाषा है। मुझे नहीं लगता कि यह लगभग प्यार हो जाता है जो इसके लायक है।

लिंक: http://www.lua.org/

0

कॉमन लिस्प कार्यान्वयन अक्सर एक FFI कि सी के साथ वास्तव में अच्छी तरह से काम करता है होगा अच्छी बात यह है कि आप किसी भी सी कोड सी पुस्तकालयों का उपयोग करने के लिए लिखने के लिए की जरूरत नहीं है कि है, आपको बस इतना करना है कि सी फंक्शन की घोषणा लिस्प है।

फैक्टर ने इस एफएफआई सिस्टम को लिस्प से कॉपी किया है।

3

मैं इस मामले में पाइथन का उपयोग नहीं करता, भले ही Boost.Python को एम्बेड करने में सहायता के लिए। यहां तक ​​कि पायथन लोगों का कहना है कि यह पाइथन में अन्य तरीकों से सी को एम्बेड करने के लिए और अधिक समझ में आता है, क्योंकि केवल पाइथन को एम्बेडेड करने के लिए डिज़ाइन नहीं किया गया है।

मैं भाषाओं कि विशेष रूप से लुआ, फाल्कन या ChaiScript तरह सी ++ या सी, में एम्बेड करने के लिए बना रहे हैं का उपयोग करना चाहते। हालांकि मुझे एक पूर्ण भाषा भी उपलब्ध है। अगर मैं भारी बाधाओं (जैसे कंसोल पर गेम) के तहत एक आवेदन लिखना चाहता हूं तो मैं लुआ का उपयोग करना पसंद करता हूं जो इसके लिए डिज़ाइन किया गया है। अन्यथा, मैं फाल्कन या चाइस्क्रिप्ट का उपयोग करना पसंद करता हूं।

फाल्कन एक अच्छा इस मामले में अजगर के लिए वैकल्पिक (C++ में एक उच्च स्तर की भाषा embedding) है: http://falconpl.org
यह C++ के साथ काम करने और यहां तक ​​कि मानक पुस्तकालयों सी में लागू किया जाता है ++ बनाया गया है। http://chaiscript.org यह केवल और आसानी से सी ++ कोड में एकीकृत हेडर जा करने के लिए बनाया गया है:

मैं भी जब मैं सिर्फ हेडर शामिल हैं और एक scripring भाषा साथ जाना चाहते ChaiScript का उपयोग करना चाहते। वास्तव में यह केवल सी ++ के साथ काम करने के लिए बनाया गया है।

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

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