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

From Vigyanwiki
No edit summary
No edit summary
 
(36 intermediate revisions by 3 users not shown)
Line 1: Line 1:
{{Short description|When called functions or methods are looked up by name at runtime}}
{{Short description|When called functions or methods are looked up by name at runtime}}
[[कम्प्यूटिंग]] में, लेट बाइंडिंग या गतिशील लिंकेज<ref>{{Cite book|url=https://www.cs.rit.edu/~ats/books/ooc.pdf|title=Object-Oriented Programming With ANSI-C|last=Schreiner|first=Axel-Tobias|publisher=Hanser|year=1994|isbn=3-446-17426-5|location=Munich|pages=15}}</ref>-हालांकि [[गतिशील लिंकर]] आयातित कूट भाषा [[पुस्तकालय (कम्प्यूटिंग)]] के लिए एक समान प्रक्रिया नहीं है - [[कंप्यूटर प्रोग्रामिंग|कंप्यूटर एक  प्रोग्रामिंग]] तंत्र है जिसमें [[विधि (कंप्यूटर प्रोग्रामिंग)]] को ऑब्जेक्ट (कंप्यूटर विज्ञान) पर बुलाया जाता है, या कार्य को तर्कों के साथ बुलाया जाता है, इसे रन टाइम के नाम (कार्यक्रम जीवनचक्र चरण) से भी देखा जाता है। दूसरे शब्दों में, [[संकलक]] के बजाय रनटाइम किसी विशेष ऑपरेशन या ऑब्जेक्ट से जुड़ा होता है। गतिशील बाइंडिंग का प्रयोग कभी-कभी किया जाता है,<ref>Booch, Grady. Object-oriented Analysis and Design. Addison-Wesley, 1994. p71</ref> लेकिन गतिशील दायरे को संदर्भित करने के लिए इसका अधिक उपयोग किया जाता है।
'''कंप्यूटिंग में, लेट बाइंडिंग या डायनेमिक लिंकेज<ref>Booch, Grady. Object-oriented Analysis and Design. Addison-Wesley, 1994. p71</ref>''' आयातित कोड लाइब्रेरी को गतिशील(डायनमिक) रूप से जोड़ने के लिए यह समान प्रक्रिया नहीं है-यह एक कंप्यूटर प्रोग्रामिंग कार्य बिधि है जिसमें किसी ऑब्जेक्ट पर कॉल की जाने वाली विधि या फंक्शन को आर्गुमेंट के साथ कॉल की जाने वाले फंक्शन के रनटाइम पर नाम से देखा जाता है। दूसरे शब्दों में, संकलन के बजाय नाम रनटाइम पर किसी विशेष ऑपरेशन या ऑब्जेक्ट से जुड़ा होता है। गतिशील(डायनमिक) बाइंडिंग का प्रयोग कभी-कभी किया जाता है<ref>{{cite web|url=http://support.microsoft.com/default.aspx?scid=kb;EN-US;245115|title=Using early binding and late binding in Automation|date= 2003-09-06|accessdate=2014-06-27|publisher=[[Microsoft]]|archive-url=https://web.archive.org/web/20140627041338/http://support.microsoft.com/default.aspx?scid=kb;EN-US;245115|archive-date=2014-06-27}}</ref>,लेकिन डायनेमिक स्कोप को संदर्भित करने के लिए इसका अधिक उपयोग किया जाता है।


[[ऑब्जेक्ट ओरिएंटेड प्रोग्रामिंग]] ऑब्जेक्ट-ओरिएंटेड लैंग्वेज में [[जल्दी बंधन]], या [[स्थैतिक बंधन]] के साथ, कंपाइलेशन फेज सभी डेटा टाइप वेरिएबल (कंप्यूटर साइंस) और एक्सप्रेशन (कंप्यूटर साइंस) को ठीक करता है। यह आमतौर पर संकलित प्रोग्राम में वर्चुअल विधि तालिका (वी-टेबल) में ऑफ़सेट के रूप में संग्रहीत होता है।<ref>{{cite web|url=http://support.microsoft.com/default.aspx?scid=kb;EN-US;245115|title=Using early binding and late binding in Automation|date= 2003-09-06|accessdate=2014-06-27|publisher=[[Microsoft]]|archive-url=https://web.archive.org/web/20140627041338/http://support.microsoft.com/default.aspx?scid=kb;EN-US;245115|archive-date=2014-06-27}}</ref> इसके विपरीत, देर से बाध्यकारी के साथ, संकलक पर्याप्त जानकारी नहीं पढ़ता है यह सत्यापित करने के लिए कि विधि मौजूद है या वी-टेबल पर इसके स्लॉट को बांधती है। इसके बजाय, विधि को रनटाइम पर नाम से देखा जाता है।
[[ऑब्जेक्ट ओरिएंटेड प्रोग्रामिंग]] भाषा में अर्ली बाइंडिंग या स्टैटिक बाइंडिंग के साथ, संकलन(कंपाइल) चरण सभी प्रकार के वेरिएबल्स और एक्सप्रेशंस को ठीक करता है। यह आमतौर पर संकलित कार्यक्रम वास्तविक विधि तालिका (वी-टेबल) में ऑफसेट के रूप में संग्रहीत होता है।<ref>{{cite web| url = http://docs.oracle.com/javase/specs/jvms/se7/html/jvms-2.html#jvms-2.6.3| title = The Structure of the Java Virtual Machine: Dynamic Linking| year = 1999 | accessdate = 2013-09-21| at = sec. 3.6.3| publisher = [[Sun Microsystems]]}}</ref> इसके विपरीत लेट बाइंडिंग के साथ संकलक(कंपाइल) पर्याप्त जानकारी नहीं पढ़ता है इसे सत्यापित करने के लिए कि विधि मौजूद है या वी-टेबल पर इसके स्लॉट को बांधती है। इसके बजाय, इस विधि को रनटाइम पर नाम से देखा जा सकता है।


[[घटक वस्तु मॉडल]] (COM[[जावा (प्रोग्रामिंग भाषा)]] लेट बाइंडिंग का उपयोग करने का प्राथमिक लाभ यह है कि इसके लिए कंपाइलर को उन लाइब्रेरी को संदर्भित करने की आवश्यकता नहीं होती है जिनमें [[संकलन समय]] पर ऑब्जेक्ट होता है। यह संकलन प्रक्रिया को संस्करण विरोधों के लिए अधिक प्रतिरोधी बनाता है, जिसमें कक्षा की वी-टेबल को गलती से संशोधित किया जा सकता है। (यह .NET या Java (प्रोग्रामिंग लैंग्वेज) जैसे [[समय-समय पर संकलन]]-संकलित प्लेटफार्मों में चिंता का विषय नहीं है, क्योंकि वी-टेबल रनटाइम पर [[आभासी मशीन]] द्वारा पुस्तकालयों के खिलाफ बनाई जाती है क्योंकि उन्हें इसमें लोड किया जा रहा है। चल रहा आवेदन।<ref>{{cite web| url = http://docs.oracle.com/javase/specs/jvms/se7/html/jvms-2.html#jvms-2.6.3| title = The Structure of the Java Virtual Machine: Dynamic Linking| year = 1999 | accessdate = 2013-09-21| at = sec. 3.6.3| publisher = [[Sun Microsystems]]}}</ref>)
[[कंपोनेंट ऑब्जेक्ट मॉडल]] (COM) प्रोग्रामिंग में लेट बाइंडिंग का उपयोग करने का प्राथमिक लाभ यह है कि इसके लिए कंपाइलर को उन लाइब्रेरी को संदर्भित करने की आवश्यकता नहीं होती है जिनमें संकलन(कंपाइल) समय पर ऑब्जेक्ट होता है। यह संकलन(कंपाइल) प्रक्रिया को संस्करण विरोधों के लिए अधिक प्रतिरोधी बनाता है, जिसमें क्लास के वी-टेबल के गलती को संशोधित किया जा सकता है।(यह .NET या जावा जैसे समय-समय पर संकलन-संकलित प्लेटफार्म में चिंता का विषय नहीं है, क्योंकि वी-टेबल का निर्माण रनटाइम पर वर्चुअल मशीन द्वारा लाइब्रेरी के खिलाफ बनाई जाती है क्योंकि उन्हें चल रहे एप्लिकेशन में लोड किया जा जाना होता है।<ref>Software engineering techniques, J. N. Buxton, [[Brian Randell]], NATO Science Committee, NATO Science Committee, 1970</ref>


== इतिहास ==
== इतिहास ==
लेट बाइंडिंग शब्द कम से कम 1960 के दशक का है, जहां यह ACM के संचार में पाया जा सकता है। लिस्प जैसी भाषाओं में कॉलिंग सम्मेलनों का वर्णन करने के लिए इस शब्द का व्यापक रूप से उपयोग किया गया था, हालांकि आमतौर पर प्रदर्शन के बारे में नकारात्मक अर्थों के साथ।<ref>Software engineering techniques, J. N. Buxton, [[Brian Randell]], NATO Science Committee, NATO Science Committee, 1970</ref>
1980 के दशक में स्मॉलटॉक ने ऑब्जेक्ट-ओरिएंटेड प्रोग्रामिंग (OOP) को लोकप्रिय बनाया और इसके साथ लेट बाइंडिंग हुई। एलन के ने एक बार कहा था, मेरे लिए OOP का मतलब केवल संदेश देना, स्थानीय प्रतिधारण, और राज्य-प्रक्रिया का संरक्षण और छिपाना, और सभी चीजों का अत्यधिक देर से बंधन होना है। यह स्मॉलटाक और एलआईएसपी में किया जा सकता है। संभवतः अन्य प्रणालियाँ हैं जिनमें यह संभव है, लेकिन मुझे उनकी जानकारी नहीं है।<ref>{{cite web|url=http://www.purl.org/stefan_ram/pub/doc_kay_oop_en |title=Dr. Alan Kay on the Meaning of "Object-Oriented Programming" |publisher=Purl.org |date= |accessdate=2013-08-16}}</ref>
1990 के दशक की शुरुआत में, Microsoft ने अपने COM मानक को विभिन्न OOP प्रोग्रामिंग भाषाओं के बीच एक बाइनरी इंटरफ़ेस के रूप में प्रचारित किया। COM प्रोग्रामिंग समान रूप से सिंटैक्स स्तर पर दोनों का समर्थन करने वाली कई भाषाओं के साथ शुरुआती और देर से बाध्यकारी को बढ़ावा देती है।


2000 में, [[एलेक्स मार्टेली]] ने एक समान अवधारणा को संदर्भित करने के लिए डक टाइपिंग शब्द गढ़ा, लेकिन एक अलग जोर के साथ। जबकि देर से बाध्यकारी आम तौर पर कार्यान्वयन विवरण पर केंद्रित होता है, [[बतख टाइपिंग]] प्रकारों को अनदेखा करने की क्षमता पर ध्यान केंद्रित करती है और वर्तमान में एक वस्तु के तरीकों पर ध्यान केंद्रित करती है।
"लेट बाइंडिंग" शब्द कम से कम 1960 के दशक का है, जहां यह ACM के संचार में पाया जाता है। लिस्प जैसी भाषाओं में कॉलिंग सम्मेलनों का वर्णन करने के लिए नकारात्मक अर्थों के साथ इस शब्द का उपयोग व्यापक रूप से किया गया था<ref>{{cite web|url=http://www.purl.org/stefan_ram/pub/doc_kay_oop_en |title=Dr. Alan Kay on the Meaning of "Object-Oriented Programming" |publisher=Purl.org |date= |accessdate=2013-08-16}}</ref>


== देर से बाध्यकारी कार्यान्वयन ==
1980 के दशक में स्मॉलटॉक ने ऑब्जेक्ट-ओरिएंटेड प्रोग्रामिंग (OOP) को और इसके साथ लेट बाइंडिंग को लोकप्रिय बनाया ।"एलन के" ने एक बार कहा था, "मेरे लिए OOP का अर्थ है केवल संदेश देना स्थानीय प्रतिधारण और सभी ऑब्जेक्ट के लिय लेटबाइंडिंग अधिकतम प्रयोग होती है | यह स्मॉलटाक और लिस्प में किया जा सकता है। संभवतः अन्य प्रणालियाँ भी हैं जिनमें यह संभव हो सकता है, लेकिन मुझे उनकी जानकारी नहीं है।<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>


=== गतिशील रूप से टाइप की गई वस्तु-उन्मुख भाषाओं में देर से बंधन ===
1990 के दशक में,माइक्रोसॉफ्ट ने अपने COM मानक को विभिन्न OOP प्रोग्रामिंग भाषाओं के बीच एक बाइनरी इंटरफेस के रूप में प्रचारित किया। COM प्रोग्रामिंग समान रूप से सिंटैक्स स्तर पर दोनों का समर्थन करने वाली कई भाषाओं के साथ अर्ली बाइंडिंग और लेटबाइंडिंग को बढ़ावा देती है।
अधिकांश प्रकार की प्रणाली में # गतिशील प्रकार की जाँच और रनटाइम प्रकार की जानकारी | गतिशील रूप से टाइप की गई भाषाएँ, किसी वस्तु पर विधियों की सूची को रनटाइम में बदला जा सकता है। इसके लिए देर से बन्धन की आवश्यकता है।


=== लिस्प में लेट बाइंडिंग ===
2000 में, [[एलेक्स मार्टेली]] ने एक समान अवधारणा को संदर्भित करने के लिए एक अलग जोर के साथ "डक टाइपिंग" शब्द को चुना। जबकि लेट बाइंडिंग सामान्यत: कार्यान्वयन विवरण पर केंद्रित होता है और [[बतख टाइपिंग|डक टाइपिंग]] प्रकारों को अनदेखा करने की क्षमता पर ध्यान केंद्रित करती है।
[[लिस्प (प्रोग्रामिंग भाषा)]] में, लेट बाउंड ग्लोबल फंक्शन कॉल्स को सिंबल (प्रोग्रामिंग) के फंक्शन सेल के माध्यम से रनटाइम पर कुशलता से देखा जाता है। ये फंक्शन बाइंडिंग म्यूटेबल हैं।


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


<वाक्यविन्यास लैंग = लिस्प>
=== लेट बाइंडिंग में डायनमिक रूप से टाइप की गई ऑब्जेक्ट ओरिएंटेड प्रोग्रामिंग भाषा ===
? (डिफन फू ()
अधिकांश गतिशील(डायनमिक) रूप से टाइप की गई भाषाओं में, किसी ऑब्जेक्ट पर विधियों की सूची को रनटाइम पर बदला जा सकता है। इसके लिए लेट बाइंडिंग की आवश्यकता पड़ती है।
    (बार पाई)); एक अभी भी अपरिभाषित फ़ंक्शन BAR को कॉल किया जाता है
कंपाइलर चेतावनियां:
; खाद्य में: अपरिभाषित समारोह बार
फू


? (डिफ़न बार (x); अब हम इसे परिभाषित करते हैं
=== लिस्प में लेट बाइंडिंग ===
    (* x 2))
[[लिस्प (प्रोग्रामिंग भाषा)]] में लेट बाउंड ग्लोबल फंक्शन कॉल्स को कुशलता से रनटाइम पर फंक्शन सेल को प्रतीक के माध्यम से देखा जाता है। ये फंक्शन बाइंडिंग परिवर्तनीय हैं।
छड़
 
? (फू); कॉलिंग फू और यह BAR की हालिया परिभाषा का उपयोग करता है
6.283185307179586D0
 
? (डिफ़न बार (x); अब हम बार को फिर से परिभाषित करते हैं
    (* x 1000))
छड़
 
? (फू); FOO अब नए फ़ंक्शन को कॉल करता है, FOO को पुनः संकलित/लिंक/लोड करने की कोई आवश्यकता नहीं है
3141.592653589793D0
 
? (टाइप-ऑफ 'बार); बार एक प्रतीक है
प्रतीक


? (प्रतीक-फ़ंक्शन 'बार); प्रतीक BAR में एक फंक्शन बाइंडिंग है
पारस्परिक [[क्लोजर सीएल|क्लोजर कॉमन लिस्प]] सत्र का उपयोग करने का उदाहरण:
#<संकलित-समारोह बार #x302000D1B21F>
? (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++ में लेट बाइंडिंग   ===
C++ में लेट बाइंडिंग (जिसे "डायनमिक बाइंडिंग" भी कहा जाता है) संदर्भित करता है कि सामान्य रूप से क्या होता है जब वर्चुअल कीवर्ड का उपयोग विधि को प्रकट करने में किया जाता है। 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>virtual</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 प्रोग्रामिंग में आईडीआई स्पैच इंटरफेस का उपयोग करके एक लेट-बाउंड मेथड कॉल किया जाता है। कुछ कॉम-आधारित भाषाएँ जैसे मूल दृश्य 6 में इस इंटरफेस को लागू करने के लिए सिंटैक्टिकल समर्थन होता है। यह वेरिएबल के प्रकार को ऑब्जेक्ट के रूप में परिभाषित करके किया जाता है।<ref>{{cite web|title=Early and Late Binding, Oracle SQL *Module for Ada Programmer's Guide|url=http://download.oracle.com/docs/cd/B19306_01/appdev.102/a58231/ch3.htm#i1007434|publisher=Download.oracle.com|accessdate=2011-01-15}}</ref> C++ जैसे अन्य भाषाओ की आवश्यकता है कि आप एक विधि देखने के लिए GetIDsOfNames को स्पष्ट रूप से कॉल करें और इसे कॉल करने के लिए परामर्श दे |


===COM भाषाओं में लेट बाइंडिंग===
=== NET में लेट बाइंडिंग ===
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 को स्पष्ट रूप से कॉल करें और इसे कॉल करने के लिए आमंत्रित करें।
.NET में, लेट बाइंडिंग का अर्थ C++ जैसी वर्चुअल विधि को ओवरराइड करना या इंटरफेस लागू करना है। कंपाइलर सभी वर्चुअल या इंटरफेस मेथड कॉल के लिए वर्चुअल टेबल बनाता है जिसका उपयोग निष्पादन के कार्यान्वयन को निर्धारित करने के लिए रन-टाइम पर किया जाता है।


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


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


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


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


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


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


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


जावा के वर्तमान मालिक ओरेकल को डक टाइपिंग अर्थ में लेट बाइंडिंग शब्द का उपयोग करने के लिए जाना जाता है, जब एक ही दस्तावेज़ में जावा और अन्य भाषाओं पर चर्चा की जाती है।<ref>{{cite web|url=http://download.oracle.com/docs/cd/E12840_01/wls/docs103/jcom/comtowls.html |title=Calling into WebLogic Server from a COM Client Application |publisher=Download.oracle.com |date= |accessdate=2013-08-16}}</ref>
जावा के वर्तमान अधिष्ठाता ओरेकल को "डक टाइपिंग" अर्थ में लेट बाइंडिंग शब्द का उपयोग करने के लिए जाना जाता है, जिसमे एक ही डक्युमेंट में जावा और अन्य भाषाओं दोनों पर चर्चा की जाती है।<ref>{{cite web|url=http://download.oracle.com/docs/cd/E12840_01/wls/docs103/jcom/comtowls.html |title=Calling into WebLogic Server from a COM Client Application |publisher=Download.oracle.com |date= |accessdate=2013-08-16}}</ref>  


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


=== PL/SQL और Ada === में अर्ली बनाम लेट बाइंडिंग
लेट बाइंडिंग का उपयोग करते समय टाइमस्टैम्प चेक नहीं किया जाता है,और संग्रहीत प्रक्रिया को अज्ञात पीएल/एसक्यूएल ब्लॉक के माध्यम से निष्पादित किया जाता है। जबकि यह धीमा हो सकता है, यह संग्रहीत प्रक्रिया में परिवर्तन होने पर सभी उपभोगता अनुप्रयोगों को पुन: संकलित करने की आवश्यकता को हटा देता है।
Ada और डेटाबेस-संग्रहीत कार्यविधि के बीच अर्ली बाइंडिंग का उपयोग करते समय, यह सत्यापित करने के लिए एक टाइमस्टैम्प की जाँच की जाती है कि संग्रहीत कार्यविधि कोड संकलित होने के बाद से नहीं बदली है। यह तेजी से निष्पादन की अनुमति देता है और एप्लिकेशन को संग्रहीत कार्यविधि के गलत संस्करण के खिलाफ चलने से रोकता है।<ref>{{cite web|title=Early and Late Binding, Oracle SQL *Module for Ada Programmer's Guide|url=http://download.oracle.com/docs/cd/B19306_01/appdev.102/a58231/ch3.htm#i1007434|publisher=Download.oracle.com|accessdate=2011-01-15}}</ref>
देर से बाध्यकारी का उपयोग करते समय टाइमस्टैम्प चेक नहीं किया जाता है, और संग्रहीत प्रक्रिया को अज्ञात पीएल/एसक्यूएल ब्लॉक के माध्यम से निष्पादित किया जाता है। जबकि यह धीमा हो सकता है, यह संग्रहीत प्रक्रिया में परिवर्तन होने पर सभी क्लाइंट अनुप्रयोगों को पुन: संकलित करने की आवश्यकता को हटा देता है।


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


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


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


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


== यह भी देखें ==
== यह भी देखें ==
{{Portal|Computer programming}}
{{Portal|Computer programming}}
* देर [[देर से जुड़ना]]
* [[देर से जुड़ना|लेट लिंकिंग]]  
* डायनेमिक लिंकर
* गतिशील लिंकर
* गतिशील प्रेषण
* गतिशील प्रेषण
* [[नाम बंधन]]
* [[नाम बंधन|नाम बाइंडिंग]]


==संदर्भ==
==संदर्भ==
{{Reflist|30em}}
{{Reflist|30em}}
[[Category: विधि (कंप्यूटर प्रोग्रामिंग)]] [[Category: प्रोग्रामिंग भाषा अवधारणाओं]]


[[Category: Machine Translated Page]]
[[Category:Created On 17/02/2023]]
[[Category:Created On 17/02/2023]]
[[Category:Lua-based templates]]
[[Category:Machine Translated Page]]
[[Category:Pages with empty portal template]]
[[Category:Pages with script errors]]
[[Category:Portal templates with redlinked portals]]
[[Category:Templates Vigyan Ready]]
[[Category:Templates that add a tracking category]]
[[Category:Templates that generate short descriptions]]
[[Category:Templates using TemplateData]]
[[Category:प्रोग्रामिंग भाषा अवधारणाओं]]
[[Category:विधि (कंप्यूटर प्रोग्रामिंग)]]

Latest revision as of 17:57, 1 May 2023

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

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

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

इतिहास

"लेट बाइंडिंग" शब्द कम से कम 1960 के दशक का है, जहां यह ACM के संचार में पाया जाता है। लिस्प जैसी भाषाओं में कॉलिंग सम्मेलनों का वर्णन करने के लिए नकारात्मक अर्थों के साथ इस शब्द का उपयोग व्यापक रूप से किया गया था[5]

1980 के दशक में स्मॉलटॉक ने ऑब्जेक्ट-ओरिएंटेड प्रोग्रामिंग (OOP) को और इसके साथ लेट बाइंडिंग को लोकप्रिय बनाया ।"एलन के" ने एक बार कहा था, "मेरे लिए OOP का अर्थ है केवल संदेश देना स्थानीय प्रतिधारण और सभी ऑब्जेक्ट के लिय लेटबाइंडिंग अधिकतम प्रयोग होती है | यह स्मॉलटाक और लिस्प में किया जा सकता है। संभवतः अन्य प्रणालियाँ भी हैं जिनमें यह संभव हो सकता है, लेकिन मुझे उनकी जानकारी नहीं है।[6]

1990 के दशक में,माइक्रोसॉफ्ट ने अपने 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>

C++ में लेट बाइंडिंग  

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Ada और डेटाबेस-संग्रहीत कार्यविधि के बीच अर्ली बाइंडिंग का उपयोग करते समय टाइमस्टैम्प सत्यापन की जाँच की जाती है कि संग्रहीत कार्यविधि कोड संकलित होने के बाद से बदली है,या नहीं | यह तेजी से निष्पादन की अनुमति देता है और एप्लिकेशन को संग्रहीत कार्यविधि के गलत संस्करण के खिलाफ चलने से रोकता है।

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

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

आलोचना

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

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

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

यह भी देखें

संदर्भ

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