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

From alpha
Jump to navigation Jump to search

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

इंटरऑपरेबिलिटी की विधियाँ

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

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

वर्चुअल मशीन

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

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

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

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

चुनौतियां

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

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

मेमोरी मॉडल

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

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

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

यह भी देखें

संदर्भ

  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.