भाषा इंटरऑपरेबिलिटी

From Vigyanwiki

लैंग्वेज इंटरऑपरेबिलिटी दो अलग-अलग प्रोग्रामिंग भाषा की एक ही सिस्टम के हिस्से के रूप में मूल रूप से इंटरेक्शन करने और एक ही तरह की डेटा संरचनाओं पर काम करने की क्षमता है।[1] प्रोग्रामिंग लैंग्वेज एक दूसरे के साथ इंटरऑपरेबल होने के कई तरीके हैं। HTML, व्यापक शैली पत्रक और जावास्क्रिप्ट इंटरऑपरेबल हैं क्योंकि वे वेबपेजों में मिलकर उपयोग किए जाते हैं। कुछ वस्तु के उन्मुख भाषाएं इंटरऑपरेबल हैं, उनके साझा होस्टिंग आभासी मशीन के लिए धन्यवाद (उदाहरण के लिए सीएलआई भाषाओं की सूची। सामान्य भाषा रनटाइम में नेट सीएलआई अनुपालन भाषाएं और जावा वर्चुअल मशीन में जेवीएम भाषाओं की सूची)।[2]


इंटरऑपरेबिलिटी के तरीके

ऑब्जेक्ट मॉडल

ऑब्जेक्ट मॉडल मानकीकृत मॉडल हैं जो वस्तुओं को भाषा-अज्ञेयवादी तरीके से प्रस्तुत करने की अनुमति देते हैं, जैसे कि समान वस्तुओं का उपयोग कार्यक्रमों और भाषाओं में किया जा सकता है। CORBA और घटक वस्तु मॉडल सबसे लोकप्रिय ऑब्जेक्ट मॉडल हैं।

वर्चुअल मशीन

विभिन्न भाषाएँ एक साझा रनटाइम में संकलित होती हैं

एक वर्चुअल मशीन (VM) एक विशेष मध्यवर्ती भाषा है जिसे कई अलग-अलग भाषाएँ संकलित करती हैं। एक ही वर्चुअल मशीन का उपयोग करने वाली भाषाएं इंटरऑपरेट कर सकती हैं, क्योंकि वे एक मेमोरी मॉडल और कंपाइलर साझा करेंगे और इस प्रकार एक भाषा से पुस्तकालयों को उसी वीएम पर दूसरों के लिए पुन: उपयोग किया जा सकता है। वीएम भाग लेने वाली भाषाओं की शुद्धता सुनिश्चित करने के लिए टाइप सिस्टम को शामिल कर सकते हैं और भाषाओं को उनके प्रकार की जानकारी के लिए एक सामान्य आधार प्रदान कर सकते हैं। संकलन या व्याख्या के दौरान एक मध्यवर्ती भाषा का उपयोग अनुकूलन के अधिक अवसर प्रदान कर सकता है।[1]


विदेशी फ़ंक्शन इंटरफेस

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

चुनौतियां

ऑब्जेक्ट मॉडल अंतर

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

मेमोरी मॉडल

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

परिवर्तनशीलता

शुद्ध कार्यात्मक और प्रक्रियात्मक भाषाओं के बीच अंतःक्रियाशीलता बनाने की कोशिश करते समय उत्परिवर्तन एक मुद्दा बन जाता है। हास्केल (प्रोग्रामिंग भाषा) जैसी भाषाओं में कोई परिवर्तनशील प्रकार नहीं है, जबकि C++ ऐसी कठोर गारंटी प्रदान नहीं करता है। ऑब्जेक्ट ओरिएंटेड भाषाओं के लिए ब्रिज किए जाने पर कई कार्यात्मक प्रकार यह गारंटी नहीं दे सकते कि अंतर्निहित ऑब्जेक्ट्स को संशोधित नहीं किया जाएगा।

यह भी देखें

संदर्भ

  1. 1.0 1.1 Malone, Todd (2014). "Interoperability in Programming Languages". CiteSeerX 10.1.1.684.337. {{cite journal}}: Cite journal requires |journal= (help)
  2. "Cross-Language Interoperability". Microsoft Developer Network (msdn.microsoft.com).
  3. Chisnall, David (2013-10-01). "The Challenge of Cross-language Interoperability". Queue. 11 (10): 20–28. doi:10.1145/2542661.2543971. ISSN 1542-7730.