विभिन्न प्रोग्रामिंग भाषाओं को मिलाकर ऐसा कुछ रहा है जो मुझे समझ में नहीं आता है। this Wikipedia article, एक विदेशी समारोह इंटरफेस (या FFI) के अनुसार कई तरह से किया जा सकता है:विदेशी फ़ंक्शन इंटरफ़ेस (एफएफआई) और भाषा बाध्यकारी को समझें
- की आवश्यकता होती है जो मेजबान भाषा प्रतिदेय निर्दिष्ट या एक खास तरह से लागू किया जा करने के लिए कर रहे हैं कि अतिथि-भाषा कार्यों; अक्सर किसी प्रकार की संगतता लाइब्रेरी का उपयोग करना।
- उचित गोंद कोड के साथ अतिथि-भाषा कार्यों को स्वचालित रूप से "लपेटें" करने के लिए टूल का उपयोग करें, जो किसी भी आवश्यक अनुवाद को निष्पादित करता है।
- रैपर पुस्तकालयों का उपयोग
- होस्ट भाषा क्षमताओं के सेट को प्रतिबंधित करना जिसे क्रॉस-भाषा का उपयोग किया जा सकता है। उदाहरण के लिए, सी से बुलाए गए C++ फ़ंक्शंस (सामान्य रूप से) संदर्भ पैरामीटर या अपवाद फेंक सकते हैं।
मेरे सवालों का:
- क्या , 1 2 और 3 तरीके के बीच मतभेद रहे हैं? ऐसा लगता है कि मुझे वे कोड को कुछ लाइब्रेरी में ऑब्जेक्ट फाइलों और हेडर फ़ाइलों के साथ संकलित करने के लिए हैं, जिन्हें कॉलिंग भाषा द्वारा बुलाया जाता है।
One source it links कहते हैं, एक FFI को लागू करने कई तरह से किया जा सकता है:
- लक्ष्य भाषा में कहा जाता कार्यों एक विशिष्ट प्रोटोकॉल लागू की आवश्यकता होती है।
- एक रैपर लाइब्रेरी को कार्यान्वित करना जो कम दी गई भाषा फ़ंक्शन लेता है, और उच्च-स्तरीय भाषा सम्मेलनों से डेटा रूपांतरण करने के लिए कोड के साथ "लपेटता है"।
- उच्च स्तरीय कार्यक्षमता (जो निम्न-स्तर की भाषा के साथ संगत है) के उप-समूह का उपयोग करने के लिए देशी घोषित कार्यों की आवश्यकता है।
मैं सोच रहा था अगर जुड़ा हुआ स्रोत में पहला तरीका विकिपीडिया में पहला रास्ता के रूप में ही है?
इस स्रोत का तीसरा तरीका क्या है? क्या यह विकिपीडिया में चौथे रास्ते से मेल खाता है?
- the same source में, जब तीन तरीकों में सूचीबद्ध करता है तुलना करते समय, कहना दो भाषाओं के बीच की खाई को भरने का काम धीरे-धीरे बुलाया भाषा बुला भाषा के लिए से स्थानांतरित है लगता है। मैं सोच रहा था कि उसे कैसे समझें? विकिपीडिया में चार तरीकों से यह स्थानांतरण भी सच है?
Language binding और एफएफआई समकक्ष अवधारणाएं हैं? वे संबंधित और भिन्न कैसे हैं?
एक लाइब्रेरी या ओएस सेवा करने के लिए एक प्रोग्रामिंग भाषा से बाध्यकारी एक API भाषा में है कि सेवा प्रदान कर रहा है।
मैं सोच रहा था कि विकिपीडिया से उद्धरण में या स्रोत से निम्नलिखित में से प्रत्येक उदाहरण किस प्रकार से संबंधित है?
- Common Object Request Broker Architecture (CORBA)
- C++ सी, निर्वासन 'सी' सी में अक्षम नाम mangling को घोषणा ++ द्वारा कॉलिंग।
- , मैटलैब में सी कॉलिंग MATLAB Interface to Shared Libraries से, यानी, पहले, सामान्य सी के माध्यम से साझा लाइब्रेरी में सी कोड संकलन इस तरह जीसीसी के रूप में संकलक, और फिर लोड हो रहा है से एक समारोह बुला और Matlab कार्यों LoadLibrary के माध्यम से साझा पुस्तकालय उतारने(), कॉललिब() और unloadlibrary()।
- JNI
- अन्य भाषाओं में कॉलिंग C/C++ द्वारा, मैटलैब में सी कॉलिंग, Creating C/C++ Language MEX-Files
- सी में मैटलैब कॉलिंग द्वारा, mcc compiler
- सी ++ जावा में कॉलिंग द्वारा JNI द्वारा, और सी में जावा कॉलिंग ++ भी
- पाइथन में कॉलिंग सी Ctypes module का उपयोग करना।
- Cython
- अजगर में आर कॉलिंग, RPy
- Programming Language Bindings to OpenGL from various languages, इस तरह के अजगर, फोरट्रान और जावा एक सी पुस्तकालय के लिए
- बाइंडिंग के रूप में से, इस तरह के रूप Cairo, विभिन्न भाषाओं से, जैसे C++ पायथन के रूप में, जावा, आम लिस्प
अपने enlightment के लिए धन्यवाद! सबसे अच्छा संबंध!
+1 अच्छा जवाब से विभिन्न भाषाओं से एक सी पुस्तकालय के लिए
एक अन्य विकल्प जिसका उल्लेख नहीं किया गया था "MATLAB इंजन का उपयोग कर सी में MATLAB को कॉल करना" है, जो जारी रखने के लिए ["पायथन एम्बेडिंग"] (http://docs.python.org/2/extending/embedding.html) के समान है समानता (जेएनआई इंटरफ़ेस का उपयोग कर जावा में सी को कॉल करने के समान) – Amro