लेट बाइंडिंग: 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>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://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>{{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 में, [[एलेक्स मार्टेली]] ने एक समान अवधारणा को संदर्भित करने के लिए एक अलग जोर के साथ "डक टाइपिंग" शब्द को चुना। जबकि लेट बाइंडिंग सामान्यत: कार्यान्वयन विवरण पर केंद्रित होता है और [[बतख टाइपिंग|डक टाइपिंग]] प्रकारों को अनदेखा करने की क्षमता पर ध्यान केंद्रित करती है। | |||
[[ | |||
== लेट बाइंडिंग कार्यान्वयन == | |||
=== लेट बाइंडिंग में डायनमिक रूप से टाइप की गई ऑब्जेक्ट ओरिएंटेड प्रोग्रामिंग भाषा === | |||
अधिकांश गतिशील(डायनमिक) रूप से टाइप की गई भाषाओं में, किसी ऑब्जेक्ट पर विधियों की सूची को रनटाइम पर बदला जा सकता है। इसके लिए लेट बाइंडिंग की आवश्यकता पड़ती है। | |||
=== लिस्प में लेट बाइंडिंग === | |||
[[लिस्प (प्रोग्रामिंग भाषा)]] में लेट बाउंड ग्लोबल फंक्शन कॉल्स को कुशलता से रनटाइम पर फंक्शन सेल को प्रतीक के माध्यम से देखा जाता है। ये फंक्शन बाइंडिंग परिवर्तनीय हैं। | |||
प्रतीक | |||
? ( | पारस्परिक [[क्लोजर सीएल|क्लोजर कॉमन लिस्प]] सत्र का उपयोग करने का उदाहरण: | ||
#< | ? (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> सामान्यत: लेट बाइंडिंग शब्द का उपयोग [[गतिशील प्रेषण|डायनमिक प्रेषण]] के पक्ष में किया जाता है। | |||
=== | ===कॉम भाषाओं में लेट बाइंडिंग=== | ||
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 को स्पष्ट रूप से कॉल करें और इसे कॉल करने के लिए परामर्श दे | | |||
=== | === NET में लेट बाइंडिंग === | ||
.NET में, लेट बाइंडिंग का अर्थ C++ जैसी वर्चुअल विधि को ओवरराइड करना या इंटरफेस लागू करना है। कंपाइलर सभी वर्चुअल या इंटरफेस मेथड कॉल के लिए वर्चुअल टेबल बनाता है जिसका उपयोग निष्पादन के कार्यान्वयन को निर्धारित करने के लिए रन-टाइम पर किया जाता है। | |||
COM और JAVA की तरह, कॉमन लैंग्वेज भी रनटाइम पर रिफ्लेक्शन एपीआई प्रदान करता है जो लेट बाइंडिंग कॉल कर सकता है। इन कॉल्स का उपयोग भाषा के अनुसार भिन्न होता है। | |||
भाषा ने C # 4 के साथ डायनमिक कूट प्रकार को भी जोड़ा ताकि यह इंगित किया जा सके की ऑब्जेक्ट के स्थान पर लेट बाइंडिंग उपयोग है या नहीं | आवश्यक विशिष्ट लेट बाइंडिंग क्रियाबिधि को डायनेमिक भाषा कार्य समय को शुरुआती बिंदु के रूप में उपयोग करते हुए कार्य समय पर निर्धारित किया जाता है। | |||