इनडायरेक्शन: Difference between revisions

From Vigyanwiki
m (Deepak moved page अविवेक to इनडायरेक्शन without leaving a redirect)
No edit summary
Line 1: Line 1:
{{short description|Computer programming construct}}
{{short description|Computer programming construct}}
{{sources|date=February 2022}}
{{sources|date=February 2022}}
[[कंप्यूटर प्रोग्रामिंग]] में, इनडायरेक्शन (जिसे डीरेफ़रेंसिंग भी कहा जाता है) मूल्य के बजाय किसी नाम, संदर्भ या कंटेनर का उपयोग करके किसी चीज़ को संदर्भित करने की क्षमता है। संकेत का सबसे सामान्य रूप किसी मान को उसके स्मृति पते के माध्यम से हेरफेर करने का कार्य है। उदाहरण के लिए, एक [[ सूचक (कंप्यूटर प्रोग्रामिंग) ]] के उपयोग के माध्यम से एक [[ चर (प्रोग्रामिंग) ]] तक पहुंचना। एक संग्रहीत सूचक जो दोहरे अप्रत्यक्ष द्वारा किसी वस्तु का संदर्भ प्रदान करने के लिए मौजूद होता है उसे ''अप्रत्यक्ष नोड'' कहा जाता है। कुछ पुराने कंप्यूटर आर्किटेक्चर में, अप्रत्यक्ष शब्द विभिन्न प्रकार के कमोबेश जटिल [[ संबोधन मोड ]] का समर्थन करते थे।
[[कंप्यूटर प्रोग्रामिंग]] में, '''इनडायरेक्शन''' (जिसे '''डीरेफ़रेंसिंग''' भी कहा जाता है) मूल्य के बजाय किसी नाम, संदर्भ या कंटेनर का उपयोग करके किसी चीज़ को संदर्भित करने की क्षमता है। अप्रत्यक्षीकरण का सबसे सामान्य रूप किसी मान को उसके मेमोरी एड्रेसे के माध्यम से प्रकलन (कम्प्यूटर) करने का कार्य है। उदाहरण के लिए, एक पॉइंटर के उपयोग के माध्यम से एक वेरिएबल तक पहुँचना है। एक संग्रहित सूचक जो दोहरे अप्रत्यक्ष द्वारा किसी वस्तु का संदर्भ प्रदान करने के लिए उपस्थित होता है, उसे अप्रत्यक्ष नोड कहा जाता है। कुछ पुराने कंप्यूटर आर्किटेक्चर में, अप्रत्यक्ष शब्द विभिन्न प्रकार के कमोबेश जटिल एड्रेसिंग मोड का समर्थन करते थे।


एक अन्य महत्वपूर्ण उदाहरण डोमेन नाम प्रणाली है जो जैसे नामों को सक्षम बनाता है <code>en.wikipedia.org</code> जगह पर उपयोग किया जाना है
 
जैसे नेटवर्क पते <code>208.80.154.224</code>. मानव-पठनीय नामों से नेटवर्क पतों की ओर संकेत का अर्थ है कि वेब पेज के संदर्भ अधिक यादगार हो जाते हैं, और जब किसी वेब साइट को किसी भिन्न सर्वर पर स्थानांतरित किया जाता है तो लिंक को बदलने की आवश्यकता नहीं होती है।
एक अन्य महत्वपूर्ण उदाहरण डोमेन नाम प्रणाली है जो <code>208.80.154.224</code> जैसे नेटवर्क एड्रेसे के स्थान पर <code>en.wikipedia.org</code> जैसे नामों का उपयोग करने में सक्षम बनाता है। मानव-पठनीय नामों से नेटवर्क एड्रेस्सेस की ओर संकेत का अर्थ है कि वेब पेज के संदर्भ अधिक यादगार हो जाते हैं, और जब किसी वेब साइट को किसी अलग सर्वर पर स्थानांतरित किया जाता है तो लिंक को बदलने की आवश्यकता नहीं होती है।


==अवलोकन==
==अवलोकन==
[[बटलर लैम्पसन]] का एक प्रसिद्ध सूत्र कहता है: कंप्यूटर विज्ञान में सभी समस्याओं को दूसरे स्तर के अप्रत्यक्ष (सॉफ्टवेयर इंजीनियरिंग के मौलिक प्रमेय) द्वारा हल किया जा सकता है।<ref>{{cite book|last=Spinellis|first=Diomidis|url=http://www.dmst.aueb.gr/dds/pubs/inbook/beautiful_code/html/Spi07g.html|chapter=Another level of indirection|editor1-last=Oram|editor1-first=Andy|editor2-last=Wilson|editor2-first=Greg|title=Beautiful Code: Leading Programmers Explain How They Think|pages=279–291|publisher=O'Reilly and Associates|location=Sebastopol, California|year=2007}}</ref>
[[बटलर लैम्पसन]] का एक प्रसिद्ध सूत्र इस प्रकार है: "कंप्यूटर विज्ञान में सभी समस्याओं को अप्रत्यक्ष स्तर के दूसरे स्तर से हल किया जा सकता है" ("सॉफ़्टवेयर इंजीनियरिंग का मौलिक प्रमेय")<ref>{{cite book|last=Spinellis|first=Diomidis|url=http://www.dmst.aueb.gr/dds/pubs/inbook/beautiful_code/html/Spi07g.html|chapter=Another level of indirection|editor1-last=Oram|editor1-first=Andy|editor2-last=Wilson|editor2-first=Greg|title=Beautiful Code: Leading Programmers Explain How They Think|pages=279–291|publisher=O'Reilly and Associates|location=Sebastopol, California|year=2007}}</ref> इसे अक्सर "अप्रत्यक्ष स्तर" के स्थान पर "अमूर्त परत (अब्स्ट्रक्शन लेयर)" के साथ अभिप्रायपूर्वक गलत तरीके से उद्धृत किया जाता है। इसका अक्सर उद्धृत परिणाम यह है, "...अप्रत्यक्ष की बहुत सारी परतों की समस्या को छोड़कर।"
इसे अक्सर अप्रत्यक्ष स्तर के स्थान पर [[अमूर्त परत]] के साथ जानबूझकर गलत उद्धृत किया जाता है। इसका अक्सर उद्धृत [[परिणाम]] यह है, ...अप्रत्यक्ष की बहुत सारी परतों की समस्या को छोड़कर।


अप्रैल फूल दिवस पर टिप्पणियों के लिए अनुरोध, {{IETF RFC|1925}}, जोर देकर कहते हैं कि:
अप्रैल फूल दिवस पर टिप्पणियों के लिए अनुरोध, {{IETF RFC|1925}}, जोर देकर कहते हैं कि:
{{quote|(6) It is easier to move a problem around (for example, by moving the problem to a different part of the overall [[network architecture]]) than it is to solve it.
{{quote|(6) It is easier to move a problem around (for example, by moving the problem to a different part of the overall [[network architecture]]) than it is to solve it.
: (6a) (corollary). It is always possible to add another level of indirection.}}
: (6a) (corollary). It is always possible to add another level of indirection.
 
 
(6) किसी समस्या को हल करने की तुलना में उसे चारों ओर ले जाना आसान है (उदाहरण के लिए, समस्या को समग्र [[नेटवर्क आर्किटेक्चर]] के एक अलग हिस्से में ले जाना)।
: (6A) (परिणाम)। अप्रत्यक्षता का एक और स्तर जोड़ना हमेशा संभव होता है।}}


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


पुनरावर्ती [[डेटा प्रकार]] आमतौर पर अप्रत्यक्ष रूप से कार्यान्वित किए जाते हैं, क्योंकि अन्यथा यदि किसी डेटाटाइप के मान में उसी डेटाटाइप के किसी अन्य मान की संपूर्णता शामिल हो सकती है, तो इस डेटाटाइप के मान के आकार की कोई सीमा नहीं हो सकती है।
पुनरावर्ती [[डेटा प्रकार]] आमतौर पर अप्रत्यक्ष रूप से कार्यान्वित किए जाते हैं, क्योंकि अन्यथा यदि किसी डेटाटाइप के मान में उसी डेटाटाइप के किसी अन्य मान की संपूर्णता शामिल हो सकती है, तो इस डेटाटाइप के मान के आकार की कोई सीमा नहीं हो सकती है।


औपचारिक गणितीय विनिर्देश से प्रतीकात्मक प्रोग्रामिंग करते समय अप्रत्यक्ष का उपयोग काफी सहायक हो सकता है। एक समीकरण में चर x, y और z जैसे सरल उदाहरण से शुरुआत करें <math display="inline">z = \sqrt{ x^2 + y^2}</math> किसी भी संख्या का उल्लेख कर सकते हैं. कोई विभिन्न संख्याओं के लिए वस्तुओं की कल्पना कर सकता है और फिर x, y और z किसी विशेष समस्या के लिए उपयोग की जाने वाली विशिष्ट संख्याओं को इंगित कर सकता है। सरल उदाहरण की अपनी सीमा है क्योंकि इसमें अपरिमित रूप से अनेक वास्तविक संख्याएँ हैं। प्रतीकात्मक प्रोग्रामिंग के विभिन्न अन्य भागों में केवल इतने ही प्रतीक हैं। तो एक अधिक महत्वपूर्ण उदाहरण पर आगे बढ़ने के लिए, तर्क में सूत्र α किसी भी सूत्र को संदर्भित कर सकता है, इसलिए यह β, γ, δ, ... या η→π, ς ∨ σ, हो सकता है ... जब [[सेट-बिल्डर नोटेशन]] को नियोजित किया जाता है तो कथन Δ={α} का अर्थ सभी सूत्रों का सेट होता है - इसलिए हालांकि संदर्भ α का है, यहां संकेत के दो स्तर हैं, पहला सभी α के सेट पर और फिर दूसरा सेट Δ में α की प्रत्येक घटना के लिए एक विशिष्ट सूत्र।
औपचारिक गणितीय विनिर्देश से सिंबॉलिक प्रोग्रामिंग करते समय अप्रत्यक्ष का उपयोग काफी सहायक हो सकता है। एक समीकरण में चर x, y और z जैसे सरल उदाहरण से प्रारंभ करें <math display="inline">z = \sqrt{ x^2 + y^2}</math> किसी भी संख्या का उल्लेख कर सकते हैं. कोई विभिन्न संख्याओं के लिए वस्तुओं की कल्पना कर सकता है और फिर x, y और z किसी विशेष समस्या के लिए उपयोग की जाने वाली विशिष्ट संख्याओं को इंगित कर सकता है। सरल उदाहरण की अपनी सीमा है क्योंकि इसमें अपरिमित रूप से अनेक वास्तविक संख्याएँ हैं। सिंबॉलिक प्रोग्रामिंग के विभिन्न अन्य भागों में केवल इतने ही प्रतीक हैं। तो एक अधिक महत्वपूर्ण उदाहरण पर आगे बढ़ने के लिए, तर्क में सूत्र α किसी भी सूत्र को संदर्भित कर सकता है, इसलिए यह β, γ, δ, ... या η→π, ς ∨ σ, हो सकता है ... जब [[सेट-बिल्डर नोटेशन]] को नियोजित किया जाता है तो कथन Δ={α} का अर्थ सभी सूत्रों का सेट होता है - इसलिए हालांकि संदर्भ α का है, यहां संकेत के दो स्तर हैं, पहला सभी α के सेट पर और फिर दूसरा सेट Δ में α की प्रत्येक घटना के लिए एक विशिष्ट सूत्र है।


==यह भी देखें==
==यह भी देखें==

Revision as of 23:41, 13 August 2023

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


एक अन्य महत्वपूर्ण उदाहरण डोमेन नाम प्रणाली है जो 208.80.154.224 जैसे नेटवर्क एड्रेसे के स्थान पर en.wikipedia.org जैसे नामों का उपयोग करने में सक्षम बनाता है। मानव-पठनीय नामों से नेटवर्क एड्रेस्सेस की ओर संकेत का अर्थ है कि वेब पेज के संदर्भ अधिक यादगार हो जाते हैं, और जब किसी वेब साइट को किसी अलग सर्वर पर स्थानांतरित किया जाता है तो लिंक को बदलने की आवश्यकता नहीं होती है।

अवलोकन

बटलर लैम्पसन का एक प्रसिद्ध सूत्र इस प्रकार है: "कंप्यूटर विज्ञान में सभी समस्याओं को अप्रत्यक्ष स्तर के दूसरे स्तर से हल किया जा सकता है" ("सॉफ़्टवेयर इंजीनियरिंग का मौलिक प्रमेय")।[1] इसे अक्सर "अप्रत्यक्ष स्तर" के स्थान पर "अमूर्त परत (अब्स्ट्रक्शन लेयर)" के साथ अभिप्रायपूर्वक गलत तरीके से उद्धृत किया जाता है। इसका अक्सर उद्धृत परिणाम यह है, "...अप्रत्यक्ष की बहुत सारी परतों की समस्या को छोड़कर।"

अप्रैल फूल दिवस पर टिप्पणियों के लिए अनुरोध, RFC 1925, जोर देकर कहते हैं कि:

(6) It is easier to move a problem around (for example, by moving the problem to a different part of the overall network architecture) than it is to solve it.

(6a) (corollary). It is always possible to add another level of indirection.


(6) किसी समस्या को हल करने की तुलना में उसे चारों ओर ले जाना आसान है (उदाहरण के लिए, समस्या को समग्र नेटवर्क आर्किटेक्चर के एक अलग हिस्से में ले जाना)।

(6A) (परिणाम)। अप्रत्यक्षता का एक और स्तर जोड़ना हमेशा संभव होता है।

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

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

औपचारिक गणितीय विनिर्देश से सिंबॉलिक प्रोग्रामिंग करते समय अप्रत्यक्ष का उपयोग काफी सहायक हो सकता है। एक समीकरण में चर x, y और z जैसे सरल उदाहरण से प्रारंभ करें किसी भी संख्या का उल्लेख कर सकते हैं. कोई विभिन्न संख्याओं के लिए वस्तुओं की कल्पना कर सकता है और फिर x, y और z किसी विशेष समस्या के लिए उपयोग की जाने वाली विशिष्ट संख्याओं को इंगित कर सकता है। सरल उदाहरण की अपनी सीमा है क्योंकि इसमें अपरिमित रूप से अनेक वास्तविक संख्याएँ हैं। सिंबॉलिक प्रोग्रामिंग के विभिन्न अन्य भागों में केवल इतने ही प्रतीक हैं। तो एक अधिक महत्वपूर्ण उदाहरण पर आगे बढ़ने के लिए, तर्क में सूत्र α किसी भी सूत्र को संदर्भित कर सकता है, इसलिए यह β, γ, δ, ... या η→π, ς ∨ σ, हो सकता है ... जब सेट-बिल्डर नोटेशन को नियोजित किया जाता है तो कथन Δ={α} का अर्थ सभी सूत्रों का सेट होता है - इसलिए हालांकि संदर्भ α का है, यहां संकेत के दो स्तर हैं, पहला सभी α के सेट पर और फिर दूसरा सेट Δ में α की प्रत्येक घटना के लिए एक विशिष्ट सूत्र है।

यह भी देखें

संदर्भ

  1. Spinellis, Diomidis (2007). "Another level of indirection". In Oram, Andy; Wilson, Greg (eds.). Beautiful Code: Leading Programmers Explain How They Think. Sebastopol, California: O'Reilly and Associates. pp. 279–291.