देर से बंधन

From alpha
Jump to navigation Jump to search

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

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

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

इतिहास

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

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

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

गतिशील रूप से टाइप की गई ऑब्जेक्ट-ओरिएंटेड भाषाओं में देर से बाइंडिंग

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

लिस्प में देर से बाइंडिंग

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

एक इंटरैक्टिव क्लोजर सीएल सत्र का उपयोग करने वाला उदाहरण:

? (defun foo ()
    (bar pi))   ; a still undefined function BAR gets called
;Compiler warnings :
;   In FOO: Undefined function BAR
FOO

? (defun bar (x)   ; now we define it
    (* x 2))
BAR

? (foo)    ; calling foo and it uses the recent definition of BAR
6.283185307179586D0

? (defun bar (x)   ; now we redefine BAR
    (* x 1000))
BAR

? (foo)    ;  FOO now calls the new function, there is no need to recompile/link/load FOO
3141.592653589793D0

? (type-of 'bar)   ;  BAR is a symbol
SYMBOL

? (symbol-function 'bar)  ; the symbol BAR has a function binding
#<Compiled-function BAR #x302000D1B21F>


सी++ में देर से बाइंडिंग

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

COM भाषाओं में देर से बाइंडिंग

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

.NET में देर से बाइंडिंग

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

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

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

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

जावा में देर से बाइंडिंग

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

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

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

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

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


पीएल/एसक्यूएल और एडीए में प्रारंभिक बनाम देर से बाइंडिंग

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

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

आलोचना

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

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

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


यह भी देखें

संदर्भ

  1. Schreiner, Axel-Tobias (1994). एएनएसआई-सी के साथ ऑब्जेक्ट-ओरिएंटेड प्रोग्रामिंग (PDF). Munich: Hanser. p. 15. ISBN 3-446-17426-5.
  2. Booch, Grady. Object-oriented Analysis and Design. Addison-Wesley, 1994. p71
  3. "ऑटोमेशन में अर्ली बाइंडिंग और लेट बाइंडिंग का उपयोग करना". 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. ""ऑब्जेक्ट-ओरिएंटेड प्रोग्रामिंग" के अर्थ पर डॉ. एलन के". Purl.org. Retrieved 2013-08-16.
  7. "12.5 — The virtual table « Learn C". Learncpp.com. 2008-02-08. Retrieved 2013-08-16.
  8. "ऑटोमेशन में अर्ली बाइंडिंग और लेट बाइंडिंग का उपयोग करना". Support.microsoft.com. Retrieved 2011-01-15.
  9. "COM क्लाइंट एप्लिकेशन से WebLogic सर्वर में कॉल करना". Download.oracle.com. Retrieved 2013-08-16.
  10. "अर्ली एंड लेट बाइंडिंग, ओरेकल एसक्यूएल *एडीए प्रोग्रामर गाइड के लिए मॉड्यूल". Download.oracle.com. Retrieved 2011-01-15.
  11. KathleenDollard. "अर्ली एंड लेट बाइंडिंग - विज़ुअल बेसिक". learn.microsoft.com. Retrieved 2023-04-12.