लेट बाइंडिंग: Difference between revisions

From Vigyanwiki
No edit summary
No edit summary
Line 56: Line 56:
सी ++ में, देर से बाध्यकारी (जिसे गतिशील बाध्यकारी भी कहा जाता है) संदर्भित करता है कि सामान्य रूप से क्या होता है जब <code>वास्तविक</code> संकेत शब्द का उपयोग विधि की घोषणा में किया जाता है। C++ फिर एक तथा-कथित आभासी तालिका बनाता है, जो ऐसे कार्यों के लिए एक अवलोकन तालिका है जिसे बुलाए जाने पर हमेशा परामर्श किया जाएगा।<ref>{{cite web|author= |url=http://www.learncpp.com/cpp-tutorial/125-the-virtual-table/ |title=12.5 — The virtual table « Learn C |publisher=Learncpp.com |date=2008-02-08 |accessdate=2013-08-16}}</ref> आमतौर पर, देर से बाध्यकारी शब्द का उपयोग [[गतिशील प्रेषण]] के पक्ष में किया जाता है।
सी ++ में, देर से बाध्यकारी (जिसे गतिशील बाध्यकारी भी कहा जाता है) संदर्भित करता है कि सामान्य रूप से क्या होता है जब <code>वास्तविक</code> संकेत शब्द का उपयोग विधि की घोषणा में किया जाता है। C++ फिर एक तथा-कथित आभासी तालिका बनाता है, जो ऐसे कार्यों के लिए एक अवलोकन तालिका है जिसे बुलाए जाने पर हमेशा परामर्श किया जाएगा।<ref>{{cite web|author= |url=http://www.learncpp.com/cpp-tutorial/125-the-virtual-table/ |title=12.5 — The virtual table « Learn C |publisher=Learncpp.com |date=2008-02-08 |accessdate=2013-08-16}}</ref> आमतौर पर, देर से बाध्यकारी शब्द का उपयोग [[गतिशील प्रेषण]] के पक्ष में किया जाता है।


===COM भाषाओं में लेट बाइंडिंग===
===कॉम भाषाओं में लेट बाइंडिंग===
COM प्रोग्रामिंग में IDISpatch इंटरफ़ेस का उपयोग करके एक लेट-बाउंड मेथड कॉल किया जाता है। कुछ COM-आधारित भाषाएँ जैसे Visual Basic 6 में इस इंटरफ़ेस को कॉल करने के लिए सिंटैक्टिकल सपोर्ट है।<ref>{{cite web|title=Using early binding and late binding in Automation|url=http://support.microsoft.com/kb/245115|publisher=Support.microsoft.com|accessdate=2011-01-15}}</ref> यह चर के प्रकार को ऑब्जेक्ट के रूप में परिभाषित करके किया जाता है। सी ++ जैसे अन्य लोगों की आवश्यकता है कि आप एक विधि देखने के लिए GetIDsOfNames को स्पष्ट रूप से कॉल करें और इसे कॉल करने के लिए आमंत्रित करें।
कॉम प्रोग्रामिंग में आईडीआई स्पेच इंटरफ़ेस का उपयोग करके एक लेट-बाउंड विधि को बुलाया जाता है। कुछ कॉम-आधारित भाषाएँ जैसे मूल दृश्य 6 में इस इंटरफ़ेस को लागू करने के लिए सिंटैक्टिकल समर्थन है।<ref>{{cite web|title=Using early binding and late binding in Automation|url=http://support.microsoft.com/kb/245115|publisher=Support.microsoft.com|accessdate=2011-01-15}}</ref> यह चर के प्रकार को वस्तु के रूप में परिभाषित किया जाता है। जैसे सी ++ अन्य लोगों की आवश्यकता है उसी प्रकार गेटआईडीएसआफनेम्स विधि को स्पष्ट रूप देखने के लिए इसे आमंत्रित करें।


=== .NET === में लेट बाइंडिंग
=== .NET === में लेट बाइंडिंग

Revision as of 15:25, 31 March 2023

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

ऑब्जेक्ट ओरिएंटेड प्रोग्रामिंग, ऑब्जेक्ट-ओरिएंटेड भाषा में जल्दी बंधन या स्थिर बंधन के साथ, कंपाइलेशन चरण सभी प्रकार के डेटा परिवर्तनशील और अभिव्यक्ति को ठीक करता है। यह आमतौर पर संकलित कार्यक्रम वास्तविक विधि तालिका (वी-टेबल) में ऑफ़सेट के रूप में संग्रहीत होता है।[3] इसके विपरीत, लेट बाइंडिंग के साथ, संकलक पर्याप्त जानकारी नहीं पढ़ता है यह सत्यापित करने के लिए कि विधि मौजूद है या वी-टेबल पर इसके स्लॉट को बांधती है। इसके बजाय,इस विधि को रनटाइम के नाम से देखा जाता है।

घटक वस्तु मॉडल (COMजावा (प्रोग्रामिंग भाषा) में लेट बाइंडिंग का उपयोग करने का प्राथमिक लाभ यह है कि इसके लिए संकलक को उन पुस्तकालय को संदर्भित करने की आवश्यकता नहीं होती है जिनमें संकलन समय पर ऑब्जेक्ट होता है। यह संकलन प्रक्रिया को संस्करण विरोधों के लिए अधिक प्रतिरोधी बनाता है, जिसमें कक्षा की वी-टेबल को गलती को संशोधित किया जा सकता है। (यह .NET या जावा (प्रोग्रामिंग भाषा) जैसे समय-समय पर संकलन-संकलित प्लेटफार्मों में चिंता का विषय नहीं है, क्योंकि वी-टेबल रनटाइम पर आभासी मशीन द्वारा पुस्तकालयों के खिलाफ बनाई जाती है क्योंकि उन्हें चल रहे आवेदन में लोड किया जा सकता है।[4])

इतिहास

लेट बाइंडिंग शब्द कम से कम 1960 के दशक का है, जहां यह एसीएम के संचार में पाया जा सकता है। लिस्प जैसी भाषाओं में कॉलिंग सम्मेलनों का वर्णन करने के लिए इस शब्द का व्यापक रूप से उपयोग किया गया था, हालांकि आमतौर पर प्रदर्शन के बारे में नकारात्मक अर्थों के साथ।[5] 1980 के दशक में स्मॉलटॉक ने ऑब्जेक्ट-ओरिएंटेड प्रोग्रामिंग (ओओपी) को लोकप्रिय बनाया और इसके साथ लेट बाइंडिंग हुई। एलन के ने एक बार कहा था, मेरे लिए ओओपी का मतलब केवल संदेश देना, स्थानीय प्रतिधारण, और राज्य-प्रक्रिया का संरक्षण और छिपाना, और सभी चीजों का अत्यधिक देर से बंधन होता है। यह स्मॉलटाक और एलआईएसपी में किया जा सकता है। संभवतः अन्य प्रणालियाँ हैं जिनमें यह संभव है, लेकिन मुझे उनकी जानकारी नहीं है।[6] 1990 के दशक की शुरुआत में,माइक्रोसॉफ्ट ने अपने कॉम मानक को विभिन्न ओओपी प्रोग्रामिंग भाषाओं के बीच एक बाइनरी इंटरफ़ेस के रूप में प्रचारित किया। कॉम प्रोग्रामिंग समान रूप से रचनाक्रम स्तर पर दोनों का समर्थन करने वाली कई भाषाओं के साथ शुरुआती और देर से बाध्यकारी को बढ़ावा देती है।

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

देर से बाध्यकारी कार्यान्वयन

गतिशील रूप से टाइप की गई वस्तु-उन्मुख भाषाओं में देर से बंधन

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

लिस्प में देर से बाध्यकारी

लिस्प (प्रोग्रामिंग भाषा) में, लेट बाउंड ग्लोबल फंक्शन कॉल्स को सिंबल (प्रोग्रामिंग) के फंक्शन सेल के माध्यम से रनटाइम पर कुशलता से देखा जाता है। ये कार्य बंधन,परिवर्तनशील हैं।

पारस्परिक क्लोजर कॉमन लिस्प सत्र का उपयोग करने का उदाहरण:

? (डिफन फू ()

   (बार पाई)); एक अभी भी अपरिभाषित फ़ंक्शन बार को बुलाया किया जाता है

कंपाइलर चेतावनियां:

खाद्य में
अपरिभाषित समारोह बार

फू

? (डिफ़न बार (x); अब हम इसे परिभाषित करते हैं

   (* x 2))

बार

? (फू); कॉलिंग फू और यह बार की हालिया परिभाषा का उपयोग करता है

6.283185307179586D0

? (डिफ़न बार (x); अब हम बार को फिर से परिभाषित करते हैं

   (* x 1000))

बार

? (फू); एफओओ अब नए फ़ंक्शन को बुलाता है,एफओओ को पुनः संकलित/लिंक/लोड करने की कोई आवश्यकता नहीं है

3141.592653589793D0

? (टाइप-ऑफ 'बार); बार एक प्रतीक है

प्रतीक

? (प्रतीक-फ़ंक्शन 'बार); प्रतीक बार में एक समारोह जुड़ा है

#<संकलित-समारोह बार #x302000D1B21F>

सी ++ में देर से बाध्यकारी

सी ++ में, देर से बाध्यकारी (जिसे गतिशील बाध्यकारी भी कहा जाता है) संदर्भित करता है कि सामान्य रूप से क्या होता है जब वास्तविक संकेत शब्द का उपयोग विधि की घोषणा में किया जाता है। C++ फिर एक तथा-कथित आभासी तालिका बनाता है, जो ऐसे कार्यों के लिए एक अवलोकन तालिका है जिसे बुलाए जाने पर हमेशा परामर्श किया जाएगा।[7] आमतौर पर, देर से बाध्यकारी शब्द का उपयोग गतिशील प्रेषण के पक्ष में किया जाता है।

कॉम भाषाओं में लेट बाइंडिंग

कॉम प्रोग्रामिंग में आईडीआई स्पेच इंटरफ़ेस का उपयोग करके एक लेट-बाउंड विधि को बुलाया जाता है। कुछ कॉम-आधारित भाषाएँ जैसे मूल दृश्य 6 में इस इंटरफ़ेस को लागू करने के लिए सिंटैक्टिकल समर्थन है।[8] यह चर के प्रकार को वस्तु के रूप में परिभाषित किया जाता है। जैसे सी ++ अन्य लोगों की आवश्यकता है उसी प्रकार गेटआईडीएसआफनेम्स विधि को स्पष्ट रूप देखने के लिए इसे आमंत्रित करें।

=== .NET === में लेट बाइंडिंग .NET में, लेट बाइंडिंग विधि ओवरराइडिंग को संदर्भित करता है virtual सी ++ या इंटरफ़ेस लागू करने जैसी विधि। कंपाइलर हर वर्चुअल या इंटरफ़ेस मेथड कॉल के लिए वर्चुअल टेबल बनाता है जिसका उपयोग निष्पादन के कार्यान्वयन को निर्धारित करने के लिए रन-टाइम पर किया जाता है।

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

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

जब भी वेरिएबल टाइप ऑब्जेक्ट का होता है और कंपाइलर डायरेक्टिव ऑप्शन स्ट्रिक्ट ऑफ लागू होता है तो विजुअल बेसिक उनका उपयोग करता है। यह एक नए वीबी प्रोजेक्ट के लिए डिफ़ॉल्ट सेटिंग है। संस्करण 9 से पहले, केवल .NET और COM ऑब्जेक्ट लेट बाउंड हो सकते थे। वीबी 10 के साथ, इसे डीएलआर-आधारित वस्तुओं तक बढ़ा दिया गया है।

जावा में लेट बाइंडिंग

जावा में लेट बाइंडिंग की तीन परिभाषाएँ हैं।

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

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

अंत में, जावा अपने प्रतिबिंब एपीआई का उपयोग करके लेट बाइंडिंग का उपयोग कर सकता है और आत्मनिरीक्षण टाइप कर सकता है उसी तरह जैसे यह COM और .NET प्रोग्रामिंग में किया जाता है। आम तौर पर जो केवल जावा में प्रोग्राम करते हैं, वे इस लेट बाइंडिंग को नहीं कहते हैं। इसी तरह जावा प्रोग्रामिंग में डक टाइपिंग तकनीकों का उपयोग किया जाता है, इसके बजाय अमूर्त इंटरफेस का उपयोग किया जाता है।

जावा के वर्तमान मालिक ओरेकल को डक टाइपिंग अर्थ में लेट बाइंडिंग शब्द का उपयोग करने के लिए जाना जाता है, जब एक ही दस्तावेज़ में जावा और अन्य भाषाओं पर चर्चा की जाती है।[9]


=== PL/SQL और Ada === में अर्ली बनाम लेट बाइंडिंग Ada और डेटाबेस-संग्रहीत कार्यविधि के बीच अर्ली बाइंडिंग का उपयोग करते समय, यह सत्यापित करने के लिए एक टाइमस्टैम्प की जाँच की जाती है कि संग्रहीत कार्यविधि कोड संकलित होने के बाद से नहीं बदली है। यह तेजी से निष्पादन की अनुमति देता है और एप्लिकेशन को संग्रहीत कार्यविधि के गलत संस्करण के खिलाफ चलने से रोकता है।[10] देर से बाध्यकारी का उपयोग करते समय टाइमस्टैम्प चेक नहीं किया जाता है, और संग्रहीत प्रक्रिया को अज्ञात पीएल/एसक्यूएल ब्लॉक के माध्यम से निष्पादित किया जाता है। जबकि यह धीमा हो सकता है, यह संग्रहीत प्रक्रिया में परिवर्तन होने पर सभी क्लाइंट अनुप्रयोगों को पुन: संकलित करने की आवश्यकता को हटा देता है।

यह अंतर PL/SQL और Ada के लिए अद्वितीय प्रतीत होता है। अन्य भाषाएँ जो PL/SQL प्रक्रियाओं को कॉल कर सकती हैं, साथ ही साथ अन्य डेटाबेस इंजन, केवल लेट बाइंडिंग का उपयोग करती हैं।

आलोचना

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

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

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

इसी तरह की समस्या यह है कि टाइपिंग जानकारी की संभावित कमी निर्भरता ग्राफ के निर्माण को रोक सकती है। हालाँकि, अन्य प्रोग्रामिंग विधियों जैसे अमूर्त इंटरफेस के परिणामस्वरूप समान समस्याएं हो सकती हैं। एक आधुनिक आईडीई इस तरह के निर्भरता ग्राफ को आसानी से बना सकता है क्योंकि यह सभी संदर्भों को ढूंढता है।

यह भी देखें

संदर्भ

  1. Schreiner, Axel-Tobias (1994). Object-Oriented Programming With ANSI-C (PDF). Munich: Hanser. p. 15. ISBN 3-446-17426-5.
  2. Booch, Grady. Object-oriented Analysis and Design. Addison-Wesley, 1994. p71
  3. "Using early binding and late binding in Automation". Microsoft. 2003-09-06. Archived from the original on 2014-06-27. Retrieved 2014-06-27.
  4. "The Structure of the Java Virtual Machine: Dynamic Linking". Sun Microsystems. 1999. sec. 3.6.3. Retrieved 2013-09-21.
  5. Software engineering techniques, J. N. Buxton, Brian Randell, NATO Science Committee, NATO Science Committee, 1970
  6. "Dr. Alan Kay on the Meaning of "Object-Oriented Programming"". Purl.org. Retrieved 2013-08-16.
  7. "12.5 — The virtual table « Learn C". Learncpp.com. 2008-02-08. Retrieved 2013-08-16.
  8. "Using early binding and late binding in Automation". Support.microsoft.com. Retrieved 2011-01-15.
  9. "Calling into WebLogic Server from a COM Client Application". Download.oracle.com. Retrieved 2013-08-16.
  10. "Early and Late Binding, Oracle SQL *Module for Ada Programmer's Guide". Download.oracle.com. Retrieved 2011-01-15.