2013-07-06 14 views
6

मुझे पता है कि वीडियो गेम जैसे कई बड़े पैमाने पर एप्लिकेशन कई लैंगेज का उपयोग करके बनाए जाते हैं। उदाहरण के लिए, गेमप्ले कार्यों के दौरान गेम/भौतिकी इंजन सी ++ में लिखे गए हैं, जीयूआई पाइथन या लुआ जैसे कुछ में लिखे गए हैं।इंटरऑपरेबिलिटी कैसे काम करता है

मैं समझता हूं क्यों भूमिकाओं का यह विभाजन किया जाता है; उन कार्यों के लिए निम्न-स्तरीय भाषाओं का उपयोग करें जिनके लिए चरम अनुकूलन, ट्वीविंग, दक्षता और गति की आवश्यकता होती है, जबकि उत्पादन के समय को तेज करने के लिए उच्च स्तरीय भाषाओं का उपयोग करते समय, खराब बग ect को कम करें।

हाल ही में, मैंने एक बड़ी निजी परियोजना शुरू करने का निर्णय लिया है और उपर्युक्त परियोजना के हिस्सों को विभाजित करना चाहता हूं। इस समय, मैं वास्तव में उलझन में हूं कि भाषाओं के बीच यह अंतःक्रियाशीलता (विशेष रूप से संकलित बनाम बनाम) काम करता है।

मैं सी/सी ++ जैसे कुछ में लिखे जाने पर निष्पादन योग्य लोड करने के लिए ANSCII कोड परीक्षण से जाने के विवरण से काफी परिचित हूं। मैं बहुत उत्सुक हूं कि वीडियो गेम की तरह कुछ अलग-अलग भाषाओं से कैसे बनाया जाता है, काम करता है। यह एक बड़ा/व्यापक प्रश्न है, लेकिन विशेष रूप से मुझे इसमें दिलचस्पी है:

  • कोड-स्तरीय तर्क कैसे काम करता है? अर्थात। मैं एक सी ++ प्रोग्राम से पायथन कोड कैसे कॉल कर सकता हूं? खासकर जब से वे एक ही अंतर्निहित प्रकार का समर्थन नहीं करते हैं?
  • प्रोग्राम छवि कैसी दिखती है? जो मैं कह सकता हूं, एक वीडियो गेम एक ही प्रक्रिया में चल रहा है, तो एक पाइथन फ़ंक्शन को कॉल करने वाले सी/सी ++ प्रोग्राम चलाने पर रनटाइम छवि कैसा दिखती है?
  • यदि किसी संकलित प्रोग्राम से किसी व्याख्या की गई भाषा से कोड को कॉल करना, घटनाओं का अनुक्रम क्या होता है? I.e अगर मैं अपने संकलित निष्पादन योग्य के अंदर हूं, और किसी कारण से लूप के अंदर एक व्याख्या की गई भाषा पर कॉल किया गया है, तो क्या मुझे हर पुनरावृत्ति के लिए दुभाषिया का इंतजार करना होगा?

मुझे वास्तव में मशीन-स्तर पर क्या हो रहा है, इस बारे में जानकारी खोजने में कठिनाई हो रही है, इसलिए किसी भी मदद की सराहना की जाएगी। हालांकि मैं सॉफ्टवेयर के अंतःक्रिया के बारे में सामान्य रूप से उत्सुक हूं, मैं विशेष रूप से सी ++ और पायथन बातचीत में रूचि रखता हूं।

किसी अंतर्दृष्टि के लिए आपको बहुत बहुत धन्यवाद, भले ही यह मुझे इंगित कर रहा हो कि मुझे और जानकारी कहां मिल सकती है।

+2

आप शायद सही अवधि – aryjczyk

+0

@aryjczyk आप लिंक के लिए धन्यवाद के लिए खोज करने के लिए नहीं पता था http://en.wikipedia.org/wiki/Foreign_function_interface। हाँ, मुझे उस शब्द के बारे में पता नहीं था। यह समझने में मदद करने में यह बहुत अच्छा है कि यह कैसे किया जाता है। मैं अभी भी उलझन में हूं कि इस तरह शारीरिक रूप से कुछ कैसे काम करता है, खासकर जीसी बनाम गैर-जीसी वातावरण में। मुझे नहीं पता कि प्रक्रिया छवि कैसी दिखती है। वैसे भी, धन्यवाद, और मैं देख रहा हूँ! – gone

उत्तर

2

अजगर के विशिष्ट मामले में, आप मूल रूप से तीन विकल्प हैं (और यह आम तौर पर बोर्ड भर में लागू होता है): C++

  1. होस्ट अजगर: से सी ++ कार्यक्रम के परिप्रेक्ष्य, पायथन दुभाषिया एक सी पुस्तकालय है। अजगर की तरफ, आपको सी (++) एपीआई का पर्दाफाश करने के लिए सीटीपीएस जैसे कुछ उपयोग करने की आवश्यकता हो सकती है या नहीं।

  2. पायथन सी ++ कोड का उपयोग डीएलएल/एसओएस के रूप में करता है - सी ++ कोड शायद पाइथन के कुछ भी नहीं जानता है, पायथन को निश्चित रूप से एक विदेशी फ़ंक्शन इंटरफ़ेस का उपयोग करना पड़ता है।

  3. इंटरप्रोसेस संचार - मूल रूप से, दो अलग-अलग प्रक्रियाएं चलती हैं, और वे सॉकेट पर बात करते हैं। इन दिनों आप इसे पूरा करने के लिए किसी प्रकार की वेब सेवा वास्तुकला का उपयोग करेंगे।

+0

आह हाँ मुझे पता था (3)। चिंता (1), मैं समझता हूं कि यह एक प्राकृतिक विचार कैसे होगा; हालांकि मुझे समझ में नहीं आता कि इसे कैसे लागू किया जाएगा क्योंकि पीई दुभाषिया स्पष्ट रूप से ** नहीं ** एक सी साझा/गतिशील पुस्तकालय है। इसके अतिरिक्त, जीसी-पर्यावरण गैर-जीसी पर्यावरण के बिना कैसे कार्य करता है? इसके अलावा, उदाहरण के लिए, यदि मैंने सी/सी ++ में कुछ एप्लिकेशन बनाया है जो एम्बेडेड पायथन का उपयोग करता है, तो क्या सभी उपयोगकर्ताओं को अपने डिस्क पर स्थापित पीई व्याख्याकर्ता की आवश्यकता होगी? – gone

+0

@Zak मुझे लगता है कि आपको बस प्रक्रियाओं के काम की मूल बातें और हुड के तहत बाइनरी कार्यक्रम कैसे बनाए जाते हैं, इसका अध्ययन करने की आवश्यकता है। पाइथन सिर्फ उन वस्तुओं को प्रबंधित करेगा जो इसे आवंटित करते हैं। पायथन को एम्बेड करने के लिए बनाया जा सकता है। विचार करें कि आपके अंतिम प्रश्न का उत्तर देने के लिए एम्बेडिंग का मतलब क्या है। – Marcin

+0

ठीक है धन्यवाद मार्सीन। मैं प्रतिक्रिया की सराहना करता हूं - मैं इसे देख लूंगा! – gone

0

कि आप क्या करना चाहते हैं पर निर्भर करता है:

  • बड़ा घूँट पर एक नज़र डालें: http://www.swig.org/ यह एक उपकरण अजगर, Tcl पर्ल, रूबी, आदि आम के साथ C/C++ कोड कनेक्ट करना है कि केस का उपयोग एक पायथन इंटरफेस (ग्राफिकल या नहीं) है जो सी/सी ++ कोड को कॉल करेगा। एसडब्ल्यूआईजी इंटरफेस उत्पन्न करने के लिए सी/सी ++ कोड का विश्लेषण करेगा।

  • लिबिप्थॉन: यह एक lib है जो आपको पायथन कोड एम्बेड करने की अनुमति देता है। आप यहाँ कुछ उदाहरण हैं: http://docs.python.org/3.0/extending/embedding.html

+0

मेरा प्रश्न ** के बारे में अधिक है ** कैसे ** SWIG काम करता है। लेकिन आपके repsonse – gone

+0

@Zak वास्तव में धन्यवाद, यह सिर्फ इतना है कि आप अपनी वेबसाइट पर SWIG कैसे काम करता है, इस बारे में अधिक जानकारी प्राप्त कर सकते हैं। वैसे भी, मैंने अधिक जानकारी जोड़ने के लिए अपना जवाब संपादित कर लिया है। –

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