लेट बाइंडिंग: 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 के साथ, भाषा ने गतिशील छद्म प्रकार भी जोड़ा। यह इंगित करने के लिए ऑब्जेक्ट प्रकार के स्थान पर उपयोग किया जाएगा कि देर से बाध्यकारी वांछित है। आवश्यक विशिष्ट लेट बाइंडिंग मैकेनिज्म को डायनेमिक लैंग्वेज रनटाइम को शुरुआती बिंदु के रूप में उपयोग करते हुए