देर से बांधना

From alpha
Jump to navigation Jump to search

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

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

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

इतिहास

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


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

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

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

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

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

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

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

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

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

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

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

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

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


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

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

आलोचना

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

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

देर से बाध्यकारी एक एकीकृत विकास पर्यावरण (आईडीई) द्वारा आवश्यक स्थिर विश्लेषण के रूपों को रोक सकता है। उदाहरण के लिए, एक IDE की गो टू डेफिनिशन सुविधा लेट-बाउंड कॉल पर कार्य नहीं कर सकती है, यदि IDE के पास यह जानने का कोई तरीका नहीं है कि कॉल किस वर्ग को संदर्भित कर सकता है। एक आधुनिक आईडीई इसे विशेष रूप से ऑब्जेक्ट-ओरिएंटेड भाषाओं के लिए आसानी से हल करता है क्योंकि देर से चलने वाली विधि हमेशा एक इंटरफ़ेस या बेस क्लास निर्दिष्ट करती है, जहां परिभाषा की ओर जाती है, और सभी संदर्भों को सभी कार्यान्वयन या ओवरराइड खोजने के लिए उपयोग किया जा सकता है।[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 Server में कॉल करना". Download.oracle.com. Retrieved 2013-08-16.
  10. "अर्ली एंड लेट बाइंडिंग, Oracle SQL *एडा प्रोग्रामर गाइड के लिए मॉड्यूल". Download.oracle.com. Retrieved 2011-01-15.
  11. KathleenDollard. "अर्ली एंड लेट बाइंडिंग - विजुअल बेसिक". learn.microsoft.com. Retrieved 2023-04-12.