दो अलग-अलग भाषाओं के साथ दो अलग-अलग प्रोग्राम कैसे करें?


26

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

ज्यादातर बार मैंने ऐसा किया है एक प्रोग्राम में फ़ाइलों को आयात करने के साथ, लेकिन उस मामले में वे एक ही भाषा हैं इसलिए यह आसान है कि मैं सिर्फ आयात फ़ंक्शन का उपयोग करता हूं, लेकिन दो भाषाओं / कार्यक्रमों के साथ एक सामंजस्यपूर्ण आउटपुट बनाने के लिए मुझे परेशानी हो रही है। ।

मैं इस सवाल के बारे में सोच रहा था क्योंकि मैं सीखने के लिए कुछ बुनियादी वेब एप्लिकेशन बनाने में गोता लगाने के बारे में सोच रहा था, लेकिन मुझे नहीं पता है कि जावास्क्रिप्ट फ़ाइल को उस चीज़ के साथ इंटरैक्टिव कैसे कहा जाए जो मैंने अजगर या इसके विपरीत में लिखा था।

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

किसी भी उत्तर के लिए धन्यवाद।


मुझे पता है कि स्विग है , ऐसा लगता है कि आप जिस चीज को चाहते हैं, वह कर सकते हैं, लेकिन मैंने इसका इस्तेमाल नहीं किया है। तो आप इसे आज़माएँ और देखें :)।
user712092

1
कृपया ध्यान दें कि आपके प्रश्न में दो पूरी तरह से असंबंधित विषय हैं, एक ही मेजबान में 2 प्रक्रियाओं / अनुप्रयोगों के बीच सामान्य संचार कर रहा है, दूसरा सामान्य वेब सर्वर / क्लाइंट आर्किटेक्चर है, जो क्लाइंट पर जेएस और सर्वर पर अजगर का उपयोग कर रहा है।
जोहो पिंटो

क्या आपने LAMP अवधारणा की समीक्षा की है? आप डेटाबेस के माध्यम से बहुत से संवाद कर सकते हैं।
एसडीसोलर

जवाबों:


28

विभिन्न भाषाओं में लिखे गए कोड कई तरीकों से बातचीत कर सकते हैं।

स्रोत के स्तर पर, एक भाषा से दूसरी भाषा में क्रॉस-संकलन भाषाओं के कुछ संयोजनों के लिए किया जा सकता है (उदाहरण के लिए, Google के GWT में एक जावा-टू-जावास्क्रिप्ट कंपाइलर शामिल है; ग्लासगो हास्केल कंपाइलर C को संकलित कर सकता है; C ++ के शुरुआती संस्करण; सी के लिए संकलित)। ज्यादातर समय, हालांकि यह वास्तव में संभव नहीं है।

एक वर्चुअल प्लेटफॉर्म, जो JVM या .NET रनटाइम जैसी भाषाएँ साझा करते हैं, आमतौर पर प्लेटफ़ॉर्म द्वारा उजागर किए गए तंत्रों के माध्यम से बातचीत कर सकते हैं - उदाहरण के लिए सभी JVM भाषाएँ जावा पुस्तकालयों तक पहुँच सकती हैं और एक दूसरे के बीच संवाद करने के लिए उनका उपयोग कर सकती हैं, और वे विधियों को कॉल कर सकती हैं और किसी अन्य JVM भाषा में बनाई गई कक्षाओं का उपयोग करें।

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

एक अन्य विकल्प दो पूरी तरह से अलग कार्यक्रमों का निर्माण करना है और उन्हें रनटाइम पर इंटरैक्ट करना है। इसे प्राप्त करने के लिए विभिन्न तंत्र हैं; सबसे आसान एक पाइप के माध्यम से है ( subprocessअजगर के लिए मॉड्यूल में देखें): मूल रूप से, एक प्रोग्राम दूसरे को कॉल करता है, अपने स्टड पर इनपुट भेजता है और परिणाम को अपने स्टडआउट से वापस पढ़ता है। यह एक प्रोग्राम को दूसरे का सबप्रोसेस बनाता है; यदि आपको लंबे समय तक जीवित रहने और स्वतंत्र रूप से शुरू होने की आवश्यकता है, तो डेटा को नामित पाइप, (स्थानीय) नेटवर्क सॉकेट, साझा की गई फ़ाइलों और (प्लेटफ़ॉर्म पर निर्भर) अन्य साधनों के माध्यम से आगे और पीछे पारित किया जा सकता है। कौन सा सबसे अच्छा निर्भर करता है


बहुत बढ़िया जवाब। एक अन्य संभावना एक दुभाषिया के लिए प्राथमिक कार्यक्रम में एम्बेडेड होने की है, आमतौर पर खेल के विकास के लिए C ++ और Lua के बीच कहा जाता है। या, ग्रीनस्पून के दसवें नियम को देखें: en.wikipedia.org/wiki/Greenspun%27s_tenth_rule
एंड्रयू

11

एक दूसरे के साथ संवाद करने के लिए दो कार्यक्रमों के लिए कई अलग-अलग अच्छी तरह से स्थापित तरीके हैं। आपने फ़ाइलों को साझा करके, और इसके साथ एक स्पष्ट कठिनाई को पहले ही पहचान लिया है। लेकिन अन्य तरीके भी हैं।

अधिकांश आधुनिक ऑपरेटिंग सिस्टम में पाइप नामक एक तंत्र होता है, जो मूल रूप से एक प्रोग्राम में एक इनपुट अंत और एक अलग प्रोग्राम में इसके आउटपुट अंत के साथ एक डेटा स्ट्रीम है। यदि आपको उसी कंप्यूटर पर चल रहे एक प्रोग्राम से दूसरे प्रोग्राम में डेटा भेजने की आवश्यकता है, तो यह उपयोग करने के लिए एक अच्छा तरीका हो सकता है।

यदि आपको दूसरे प्रोग्राम को कॉल करने के लिए उपयोग करने के लिए एक प्रोग्राम के लिए एक एपीआई सेट करने की आवश्यकता है, तो आप आरपीसी, (दूरस्थ प्रक्रिया कॉल) को देखना चाहते हैं, जो फिर से आमतौर पर ओएस स्तर पर समर्थित होता है।

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

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


2

संदेश पासिंग यहां सामान्य अवधारणा प्रतीत होगी क्योंकि ऐसे कई उदाहरण हैं जहां विभिन्न भाषाएं आपस में बातचीत कर सकती हैं, जैसे कोई COM घटकों के साथ क्लासिक एएसपी और कुछ जावास्क्रिप्ट का उपयोग कर सकता है ताकि एक ही एप्लिकेशन में उपयोग की जाने वाली 3 अलग-अलग भाषाओं का मिश्रण मिल सके।

उदाहरण के लिए, आप बताएंगे कि क्या ऑपरेटिंग सिस्टम को फाइल सिस्टम पर हैंडल करने के लिए ताले कुछ नहीं होंगे? प्रत्येक कार्यक्रम दूसरे के बारे में जरूरी नहीं जानता कि याद रखें।


0

अधिकांश सॉफ़्टवेयर घटकों को निर्देशों के संदर्भ में संवाद नहीं करना चाहिए, लेकिन डेटा भेजना और प्राप्त करना चाहिए: डेटाबेस के साथ सहभागिता, JSON / XML अनुरोधों को भेजें / प्राप्त करें;


0

आपकी प्रकार की समस्या के आधार पर, पाइप का मानक शेल उपयोग पर्याप्त हो सकता है (आपके शेल में प्रकार):

program1 | program2

इस तरह program1 का आउटपुट सीधे program2 के इनपुट में जाता है। बेशक यह हर समस्या के लिए काम नहीं करता है, लेकिन इस दृष्टिकोण का उपयोग करके बहुत सारी (गैर-इंटरैक्टिव) समस्याओं को हल किया जा सकता है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.