नेमस्पेस: Difference between revisions

From Vigyanwiki
No edit summary
No edit summary
Line 2: Line 2:
{{for|लिनक्स कर्नेल की एक विशेषता|लिनक्स नामस्थान}}
{{for|लिनक्स कर्नेल की एक विशेषता|लिनक्स नामस्थान}}
{{short description|Container for a set of identifiers}}
{{short description|Container for a set of identifiers}}
[[कम्प्यूटिंग]] में, नामस्थान संकेतों (''नाम'') का सेट है जो विभिन्न प्रकार की वस्तुओं को पहचानने और संदर्भित करने के लिए उपयोग किया जाता है। नेमस्पेस यह सुनिश्चित करता है कि दिए गए सभी ऑब्जेक्ट्स के सेट में अद्वितीय नाम हों ताकि वे आसानी से [[पहचानकर्ता]] बन सकें।
[[कम्प्यूटिंग]] में, नामस्थान संकेतों (''नामों'') का सेट है जो विभिन्न प्रकार की वस्तुओं को पहचानने और संदर्भित करने के लिए उपयोग किया जाता है। नामस्थान यह सुनिश्चित करता है कि दिए गए ऑब्जेक्ट्स के सभी सेट के अद्वितीय नाम हों ताकि उन्हें आसानी से [[पहचानकर्ता|पहचाना]] जा सकें।


अलग-अलग संदर्भों में नामों के पुन: उपयोग की अनुमति देने के लिए नामस्थानों को आमतौर पर पदानुक्रम के रूप में संरचित किया जाता है। सादृश्य के रूप में, [[नृविज्ञान]] की प्रणाली पर विचार करें जहां प्रत्येक व्यक्ति का दिया गया नाम है, साथ ही परिवार का नाम उनके रिश्तेदारों के साथ साझा किया जाता है। यदि परिवार के सदस्यों के पहले नाम केवल प्रत्येक परिवार के भीतर अद्वितीय हैं, तो प्रत्येक व्यक्ति को पहले नाम और परिवार के नाम के संयोजन से विशिष्ट रूप से पहचाना जा सकता है; केवल जेन डो है, हालांकि कई जेन हो सकते हैं। डो परिवार के नाम स्थान के भीतर, सिर्फ जेन इस व्यक्ति को स्पष्ट रूप से नामित करने के लिए पर्याप्त है, जबकि सभी लोगों के वैश्विक नाम स्थान के भीतर, पूरा नाम इस्तेमाल किया जाना चाहिए।
अलग-अलग संदर्भों में नामों के पुन: उपयोग की अनुमति देने के लिए नामस्थानों को आमतौर पर पदानुक्रम के रूप में संरचित किया जाता है। सादृश्य के रूप में, लोगों के नामकरण की [[नृविज्ञान]] की प्रणाली पर विचार करें जहां प्रत्येक व्यक्ति का एक दिया गया नाम है, साथ ही परिवार का नाम उनके रिश्तेदारों के साथ साझा किया जाता है। यदि परिवार के सदस्यों के पहले नाम केवल प्रत्येक परिवार के भीतर अद्वितीय हैं, तो प्रत्येक व्यक्ति को पहले नाम और परिवार के नाम के संयोजन से विशिष्ट रूप से पहचाना जा सकता है; केवल जेन डो है, हालांकि कई जेन हो सकते हैं। डो परिवार के नाम स्थान के भीतर, सिर्फ जेन इस व्यक्ति को स्पष्ट रूप से नामित करने के लिए पर्याप्त है, जबकि सभी लोगों के वैश्विक नाम स्थान के भीतर, पूरा नाम इस्तेमाल किया जाना चाहिए।


नामस्थानों के प्रमुख उदाहरणों में [[फाइल सिस्टम]] शामिल हैं, जो फाइलों को नाम प्रदान करते हैं।<ref>{{cite conference
नामस्थानों के प्रमुख उदाहरणों में [[फाइल सिस्टम]] शामिल हैं, जो फाइलों को नाम प्रदान करते हैं।<ref>{{cite conference
Line 34: Line 34:
  |archive-url=https://web.archive.org/web/20100728202945/http://paul.rutgers.edu/cs545/S06/papers/adya-farsite-osdi-2002.pdf  
  |archive-url=https://web.archive.org/web/20100728202945/http://paul.rutgers.edu/cs545/S06/papers/adya-farsite-osdi-2002.pdf  
  |archive-date=2010-07-28  
  |archive-date=2010-07-28  
}}</ref>
}}</ref> कुछ [[प्रोग्रामिंग भाषा]] अपने वेरिएबल (कंप्यूटर साइंस) और [[सबरूटीन]] को नामस्थान में व्यवस्थित करती हैं।<ref>{{cite web|url=http://en.csharp-online.net/CSharp_FAQ:_What_is_a_namespace |title=C# FAQ: What is a namespace |publisher=C# Online Net |quote=A namespace is nothing but a group of assemblies, classes, or types. A namespace acts as a container—like a disk folder—for classes organized into groups usually based on functionality. C# namespace syntax allows namespaces to be nested. |access-date=2010-02-23 |archive-url=https://web.archive.org/web/20131020150529/http://tutorials.csharp-online.net/index.php?title=CSharp_FAQ%3A_What_is_a_namespace |archive-date=2013-10-20 }}</ref><ref>{{Cite web|url=http://php.net/manual/en/language.namespaces.rationale.php|title=An overview of namespaces in PHP|website=PHP Manual|quote=What are namespaces? In the broadest definition, namespaces are a way of encapsulating items. This can be seen as an abstract concept in many places. For example, in any operating system directories serve to group related files, and act as a namespace for the files within them.}}</ref><ref>{{Cite web|url=https://docs.oracle.com/javase/tutorial/java/package/namingpkgs.html|title=Creating and Using Packages|website=Java Documentation|publisher=Oracle|quote=A package is a grouping of related types providing access protection and name space management. Note that types refers to classes, interfaces, enumerations, and annotation types. Enumerations and annotation types are special kinds of classes and interfaces, respectively, so types are often referred to in this lesson simply as classes and interfaces.}}{{better source|date=July 2015}}</ref> [[संगणक संजाल|कंप्यूटर नेटवर्क]] और वितरित सिस्टम संसाधनों को नाम देते हैं, जैसे कंप्यूटर, प्रिंटर, [[वेबसाइट]] और रिमोट फाइल्स। वर्चुअलाइजेशन [[ओएस-स्तरीय वर्चुअलाइजेशन]] का समर्थन करने के लिए [[ऑपरेटिंग सिस्टम]] पृथक नामस्थानों द्वारा कर्नेल संसाधनों को विभाजित कर सकते हैं।
कुछ [[प्रोग्रामिंग भाषा]] अपने वेरिएबल (कंप्यूटर साइंस) और [[सबरूटीन]]्स को नेमस्पेस में व्यवस्थित करती हैं।<ref>{{cite web|url=http://en.csharp-online.net/CSharp_FAQ:_What_is_a_namespace |title=C# FAQ: What is a namespace |publisher=C# Online Net |quote=A namespace is nothing but a group of assemblies, classes, or types. A namespace acts as a container—like a disk folder—for classes organized into groups usually based on functionality. C# namespace syntax allows namespaces to be nested. |access-date=2010-02-23 |archive-url=https://web.archive.org/web/20131020150529/http://tutorials.csharp-online.net/index.php?title=CSharp_FAQ%3A_What_is_a_namespace |archive-date=2013-10-20 }}</ref><ref>{{Cite web|url=http://php.net/manual/en/language.namespaces.rationale.php|title=An overview of namespaces in PHP|website=PHP Manual|quote=What are namespaces? In the broadest definition, namespaces are a way of encapsulating items. This can be seen as an abstract concept in many places. For example, in any operating system directories serve to group related files, and act as a namespace for the files within them.}}</ref><ref>{{Cite web|url=https://docs.oracle.com/javase/tutorial/java/package/namingpkgs.html|title=Creating and Using Packages|website=Java Documentation|publisher=Oracle|quote=A package is a grouping of related types providing access protection and name space management. Note that types refers to classes, interfaces, enumerations, and annotation types. Enumerations and annotation types are special kinds of classes and interfaces, respectively, so types are often referred to in this lesson simply as classes and interfaces.}}{{better source|date=July 2015}}</ref>
[[संगणक संजाल]] और वितरित सिस्टम संसाधनों को नाम देते हैं, जैसे कंप्यूटर, प्रिंटर, [[वेबसाइट]] और रिमोट फाइल्स। वर्चुअलाइजेशन [[ओएस-स्तरीय वर्चुअलाइजेशन]] का समर्थन करने के लिए [[ऑपरेटिंग सिस्टम]] पृथक नामस्थानों द्वारा कर्नेल संसाधनों को विभाजित कर सकते हैं।


इसी तरह, डायरेक्टरी (कंप्यूटिंग) फाइलों को डायरेक्टरी में व्यवस्थित करती है। प्रत्येक निर्देशिका अलग नामस्थान है, ताकि निर्देशिका पत्र और चालान दोनों में to_jane फ़ाइल हो सकती है।
इसी तरह, पदानुक्रमित (कंप्यूटिंग) फाइल सिस्टम फाइलों को निर्देशिकाओं में व्यवस्थित करते हैं। प्रत्येक निर्देशिका अलग नामस्थान है, ताकि निर्देशिका पत्र और चालान दोनों में जेन की फ़ाइल हो सकती है।


[[कंप्यूटर प्रोग्रामिंग]] में, नामस्थान आमतौर पर विशेष कार्यक्षमता के आसपास प्रतीकों और पहचानकर्ताओं को समूहीकृत करने के उद्देश्य से और ही नाम साझा करने वाले कई पहचानकर्ताओं के बीच नाम टकराव से बचने के लिए नियोजित होते हैं।
[[कंप्यूटर प्रोग्रामिंग]] में, नामस्थान आमतौर पर विशेष कार्यक्षमता के आसपास प्रतीकों और पहचानकर्ताओं को समूहीकृत करने के उद्देश्य से और ही नाम साझा करने वाले कई पहचानकर्ताओं के बीच नाम टकराव से बचने के लिए नियोजित होते हैं।
Line 45: Line 43:


== नाम विरोध ==
== नाम विरोध ==
तत्व के नाम डेवलपर द्वारा परिभाषित किए गए हैं। विभिन्न XML अनुप्रयोगों से XML दस्तावेज़ों को मिलाने का प्रयास करते समय यह अक्सर विरोध का कारण बनता है।
तत्व के नाम डेवलपर द्वारा परिभाषित किए गए हैं। विभिन्न एक्सएमएल अनुप्रयोगों से एक्सएमएल दस्तावेज़ों को मिलाने का प्रयास करते समय यह अक्सर विरोध का कारण बनता है।


इस XML में HTML टेबल की जानकारी होती है:<syntaxhighlight lang="d">
इस एक्सएमएल में एचटीएमएल तालिका की जानकारी होती है:<syntaxhighlight lang="d">
<table>
<table>
     <tr>
     <tr>
Line 56: Line 54:
</syntaxhighlight>
</syntaxhighlight>


इस एक्सएमएल में [[टेबल (फर्नीचर)]] (यानी फर्नीचर का टुकड़ा) के बारे में जानकारी है:<syntaxhighlight lang="d">
इस एक्सएमएल में [[टेबल (फर्नीचर)|तालिका (फर्नीचर)]] (यानी फर्नीचर का टुकड़ा) के बारे में जानकारी है:<syntaxhighlight lang="d">
<table>
<table>
     <name>African Coffee Table</name>
     <name>African Coffee Table</name>
Line 62: Line 60:
     <length>120</length>
     <length>120</length>
</table>
</table>
</syntaxhighlight>यदि इन XML अंशों को साथ जोड़ा गया था, तो नाम विरोध होगा। दोनों में है {{tag|table}} तत्व, लेकिन तत्वों की अलग सामग्री और अर्थ है।
</syntaxhighlight>यदि इन एक्सएमएल अंशों को साथ जोड़ा गया था, तो नाम विरोध होगा। दोनों में {{tag|table}} तत्व होता हैं, लेकिन तत्वों की सामग्री और अर्थ भिन्न होते हैं।


XML पार्सर को यह नहीं पता होगा कि इन अंतरों को कैसे हैंडल किया जाए।
एक्सएमएल पार्सर को यह नहीं पता होगा कि इन अंतरों को कैसे नियंत्रित किया जाए।


=== उपसर्ग के माध्यम से समाधान ===
=== उपसर्ग के माध्यम से समाधान ===
XML में नाम के विरोध को नाम उपसर्ग के प्रयोग से आसानी से टाला जा सकता है।
एक्सएमएल में नाम के विरोध को नाम उपसर्ग के प्रयोग से आसानी से टाला जा सकता है।


निम्नलिखित एक्सएमएल तत्वों की शुरुआत में एच और एफ उपसर्ग करके एचटीएमएल तालिका और फर्नीचर के बारे में जानकारी के बीच अंतर करता है।<syntaxhighlight lang="d">
निम्नलिखित एक्सएमएल तत्वों की शुरुआत में एच और एफ उपसर्ग करके एचटीएमएल तालिका और फर्नीचर के बारे में जानकारी के बीच अंतर करता है।<syntaxhighlight lang="d">
Line 133: Line 131:


=== प्रतिनिधिमंडल ===
=== प्रतिनिधिमंडल ===
पार्टियों के बीच जिम्मेदारियों का प्रतिनिधिमंडल वास्तविक दुनिया के अनुप्रयोगों में महत्वपूर्ण है, जैसे वर्ल्ड वाइड वेब की संरचना। नामस्थान वैश्विक विशिष्टता को बनाए रखते हुए कई नाम जारी करने वाले संगठनों को पहचानकर्ता असाइनमेंट के प्रतिनिधिमंडल की अनुमति देते हैं।<ref>{{cite IETF  |title= Functional Requirements for Uniform Resource Names |rfc=1731 |sectionname=Requirements for functional capabilities |section=2 |page=3 |last= Sollins & Masinter |date=December 1994 |publisher=[[Internet Engineering Task Force|IETF]] |access-date= 2012-03-30}}</ref> केंद्रीय [[पंजीकरण प्राधिकरण]] [[राष्ट्रीय इंटरनेट रजिस्ट्री]] को पंजीकृत करता है। प्रत्येक नेमस्पेस नाम संगठन को आवंटित किया जाता है जो बाद में उनके आवंटित नेमस्पेस में नामों के असाइनमेंट के लिए जिम्मेदार होता है। यह संगठन नाम जारी करने वाला संगठन हो सकता है जो खुद [[मेटाडेटा रजिस्ट्री]] करता है, या कोई अन्य पंजीकरण प्राधिकरण जो अपने नामस्थान के कुछ हिस्सों को अलग-अलग संगठनों को सौंपता है।
वर्ल्ड वाइड वेब की संरचना जैसे वास्तविक दुनिया के अनुप्रयोगों में पार्टियों के बीच जिम्मेदारियों का प्रत्यायोजन महत्वपूर्ण है। नामस्थान वैश्विक विशिष्टता को बनाए रखते हुए कई नाम जारी करने वाले संगठनों को पहचानकर्ता असाइनमेंट सौंपने की अनुमति देते हैं।<ref>{{cite IETF  |title= Functional Requirements for Uniform Resource Names |rfc=1731 |sectionname=Requirements for functional capabilities |section=2 |page=3 |last= Sollins & Masinter |date=December 1994 |publisher=[[Internet Engineering Task Force|IETF]] |access-date= 2012-03-30}}</ref> केंद्रीय [[पंजीकरण प्राधिकरण]] [[राष्ट्रीय इंटरनेट रजिस्ट्री]] को पंजीकृत करता है। प्रत्येक नेमस्पेस नाम एक संगठन को आवंटित किया जाता है जो बाद में उनके आवंटित नेमस्पेस में नामों के असाइनमेंट के लिए जिम्मेदार होता है। यह संगठन एक नाम जारी करने वाला संगठन हो सकता है जो स्वयं [[मेटाडेटा रजिस्ट्री]] करता है,या किसी अन्य पंजीकरण प्राधिकरण को नाम निर्दिष्ट करता है जो आगे उनके नामस्थान के कुछ हिस्सों को विभिन्न संगठनों को सौंपता है।


=== पदानुक्रम===
=== पदानुक्रम===
Line 140: Line 138:
पदानुक्रम पुनरावर्ती है यदि नामस्थान नामों के लिए सिंटैक्स प्रत्येक उप-प्रतिनिधि के लिए समान है। पुनरावर्ती पदानुक्रम का उदाहरण [[डोमेन नाम]] है।
पदानुक्रम पुनरावर्ती है यदि नामस्थान नामों के लिए सिंटैक्स प्रत्येक उप-प्रतिनिधि के लिए समान है। पुनरावर्ती पदानुक्रम का उदाहरण [[डोमेन नाम]] है।


गैर-पुनरावर्ती पदानुक्रम का उदाहरण [[समान संसाधन का नाम]] है जो इंटरनेट असाइन किए गए नंबर अथॉरिटी (IANA) नंबर का प्रतिनिधित्व करता है।
गैर-पुनरावर्ती पदानुक्रम का उदाहरण [[समान संसाधन का नाम]] है जो इंटरनेट असाइन किए गए नंबर अथॉरिटी (आईएएनए) नंबर का प्रतिनिधित्व करता है।


{| class=wikitable
{| class=wikitable
Line 159: Line 157:




=== नेमस्पेस बनाम स्कोप ===
=== नामस्थान बनाम स्कोप ===
नाम स्थान का नाम नाम के लिए संदर्भ (कंप्यूटर विज्ञान में स्कोप (कंप्यूटर विज्ञान)) प्रदान कर सकता है, और कभी-कभी शब्दों को दूसरे के स्थान पर उपयोग किया जाता है। हालाँकि, किसी नाम का संदर्भ अन्य कारकों द्वारा भी प्रदान किया जा सकता है, जैसे कि वह स्थान जहाँ वह होता है या नाम का वाक्य-विन्यास।
नाम स्थान का नाम नाम के लिए संदर्भ (कंप्यूटर विज्ञान में स्कोप (कंप्यूटर विज्ञान)) प्रदान कर सकता है, और कभी-कभी शब्दों को दूसरे के स्थान पर उपयोग किया जाता है। हालाँकि, किसी नाम का संदर्भ अन्य कारकों द्वारा भी प्रदान किया जा सकता है, जैसे कि वह स्थान जहाँ वह होता है या नाम का वाक्य-विन्यास।


Line 173: Line 171:


== प्रोग्रामिंग भाषाओं में ==
== प्रोग्रामिंग भाषाओं में ==
कई प्रोग्रामिंग भाषाओं के लिए, नामस्थान उनके पहचानकर्ता (कंप्यूटर भाषाओं) के लिए संदर्भ है। ऑपरेटिंग सिस्टम में, नेमस्पेस का उदाहरण डायरेक्टरी है। निर्देशिका में प्रत्येक नाम विशिष्ट रूप से फ़ाइल या उपनिर्देशिका की पहचान करता है।<ref>{{cite web|url=http://tutorials.csharp-online.net/CSharp_FAQ:_What_is_a_namespace|title=C# FAQ: What is a namespace|website=C# Online Net|archive-url=https://web.archive.org/web/20131020153832/http://tutorials.csharp-online.net/CSharp_FAQ:_What_is_a_namespace|archive-date=October 20, 2013|access-date=2010-02-23|quote=For instance, [under [[Microsoft Windows|Windows]]], to access the built-in input-output (I/O) classes and members, use the System.IO namespace. Or, to access Web-related classes and members, use the System{{Not a typo|.}}Web namespace.}}</ref>
कई प्रोग्रामिंग भाषाओं के लिए, नामस्थान उनके पहचानकर्ता (कंप्यूटर भाषाओं) के लिए संदर्भ है। ऑपरेटिंग सिस्टम में, नामस्थान का उदाहरण पदानुक्रमित है। निर्देशिका में प्रत्येक नाम विशिष्ट रूप से फ़ाइल या उपनिर्देशिका की पहचान करता है।<ref>{{cite web|url=http://tutorials.csharp-online.net/CSharp_FAQ:_What_is_a_namespace|title=C# FAQ: What is a namespace|website=C# Online Net|archive-url=https://web.archive.org/web/20131020153832/http://tutorials.csharp-online.net/CSharp_FAQ:_What_is_a_namespace|archive-date=October 20, 2013|access-date=2010-02-23|quote=For instance, [under [[Microsoft Windows|Windows]]], to access the built-in input-output (I/O) classes and members, use the System.IO namespace. Or, to access Web-related classes and members, use the System{{Not a typo|.}}Web namespace.}}</ref>
 
नियम के रूप में, नामस्थान में नामों के से अधिक अर्थ नहीं हो सकते; अर्थात्, अलग-अलग अर्थ ही नाम को ही नामस्थान में साझा नहीं कर सकते हैं। नामस्थान को [[संदर्भ (कंप्यूटिंग)]] भी कहा जाता है, क्योंकि अलग-अलग नामस्थानों में ही नाम के अलग-अलग अर्थ हो सकते हैं, प्रत्येक अपने नामस्थान के लिए उपयुक्त है।
नियम के रूप में, नामस्थान में नामों के से अधिक अर्थ नहीं हो सकते; अर्थात्, अलग-अलग अर्थ ही नाम को ही नामस्थान में साझा नहीं कर सकते हैं। नामस्थान को [[संदर्भ (कंप्यूटिंग)]] भी कहा जाता है, क्योंकि अलग-अलग नामस्थानों में ही नाम के अलग-अलग अर्थ हो सकते हैं, प्रत्येक अपने नामस्थान के लिए उपयुक्त है।


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


Line 206: Line 205:


===कंप्यूटर-विज्ञान के विचार ===
===कंप्यूटर-विज्ञान के विचार ===
कंप्यूटर विज्ञान में नाम स्थान (कभी-कभी नाम का दायरा भी कहा जाता है) अमूर्त कंटेनर या पर्यावरण है जो विशिष्ट पहचानकर्ताओं या [[प्रतीक]]ों (अर्थात नाम) के तार्किक समूह को धारण करने के लिए बनाया गया है। नामस्थान में परिभाषित पहचानकर्ता केवल उस नामस्थान से जुड़ा होता है। ही पहचानकर्ता को कई नामस्थानों में स्वतंत्र रूप से परिभाषित किया जा सकता है। अर्थात्, नामस्थान में परिभाषित पहचानकर्ता का वही अर्थ हो सकता है या नहीं हो सकता है जो दूसरे नामस्थान में परिभाषित समान पहचानकर्ता के रूप में है। नामस्थानों का समर्थन करने वाली भाषाएं उन नियमों को निर्दिष्ट करती हैं जो निर्धारित करते हैं कि कौन सा नामस्थान पहचानकर्ता (इसकी परिभाषा नहीं) से संबंधित है।<ref>{{cite web |url=http://www.webopedia.com/TERM/N/namespace.html |title=A namespace is "a logical grouping of the names used within a program."|date=10 April 2002 | publisher=Webopedia.com| access-date=2011-07-26}}</ref>
कंप्यूटर विज्ञान में नाम स्थान (कभी-कभी नाम का दायरा भी कहा जाता है) अमूर्त कंटेनर या पर्यावरण है जो विशिष्ट पहचानकर्ताओं या [[प्रतीक|प्रतीकों]] (अर्थात नाम) के तार्किक समूह को धारण करने के लिए बनाया गया है। नामस्थान में परिभाषित पहचानकर्ता केवल उस नामस्थान से जुड़ा होता है। ही पहचानकर्ता को कई नामस्थानों में स्वतंत्र रूप से परिभाषित किया जा सकता है। अर्थात्, नामस्थान में परिभाषित पहचानकर्ता का वही अर्थ हो सकता है या नहीं हो सकता है जो दूसरे नामस्थान में परिभाषित समान पहचानकर्ता के रूप में है। नामस्थानों का समर्थन करने वाली भाषाएं उन नियमों को निर्दिष्ट करती हैं जो निर्धारित करते हैं कि कौन सा नामस्थान पहचानकर्ता (इसकी परिभाषा नहीं) से संबंधित है।<ref>{{cite web |url=http://www.webopedia.com/TERM/N/namespace.html |title=A namespace is "a logical grouping of the names used within a program."|date=10 April 2002 | publisher=Webopedia.com| access-date=2011-07-26}}</ref>


इस अवधारणा को सादृश्य द्वारा चित्रित किया जा सकता है। कल्पना कीजिए कि दो कंपनियां, एक्स और वाई, प्रत्येक अपने कर्मचारियों को आईडी नंबर प्रदान करती हैं। X के पास ही आईडी नंबर वाले दो कर्मचारी नहीं होने चाहिए, और इसी तरह Y के लिए; लेकिन दोनों कंपनियों में ही आईडी नंबर का इस्तेमाल करना कोई समस्या नहीं है। उदाहरण के लिए, यदि बिल कंपनी X के लिए काम करता है और जेन कंपनी Y के लिए काम करता है, तो उनमें से प्रत्येक के लिए कर्मचारी #123 होना कोई समस्या नहीं है। इस समानता में, आईडी नंबर पहचानकर्ता है, और कंपनी नेमस्पेस के रूप में कार्य करती है। यह ही पहचानकर्ता के लिए प्रत्येक नामस्थान में अलग व्यक्ति की पहचान करने में समस्या पैदा नहीं करता है।
इस अवधारणा को सादृश्य द्वारा चित्रित किया जा सकता है। कल्पना कीजिए कि दो कंपनियां, एक्स और वाई, प्रत्येक अपने कर्मचारियों को आईडी नंबर प्रदान करती हैं। X के पास ही आईडी नंबर वाले दो कर्मचारी नहीं होने चाहिए, और इसी तरह Y के लिए; लेकिन दोनों कंपनियों में ही आईडी नंबर का इस्तेमाल करना कोई समस्या नहीं है। उदाहरण के लिए, यदि बिल कंपनी X के लिए काम करता है और जेन कंपनी Y के लिए काम करता है, तो उनमें से प्रत्येक के लिए कर्मचारी #123 होना कोई समस्या नहीं है। इस समानता में, आईडी नंबर पहचानकर्ता है, और कंपनी नामस्थान के रूप में कार्य करती है। यह ही पहचानकर्ता के लिए प्रत्येक नामस्थान में अलग व्यक्ति की पहचान करने में समस्या पैदा नहीं करता है।


बड़े [[कंप्यूटर प्रोग्राम]] या दस्तावेजों में सैकड़ों या हजारों पहचानकर्ताओं का होना आम बात है। नामस्थान (या इसी तरह की तकनीक, #Emulating नामस्थान देखें) स्थानीय पहचानकर्ताओं को छिपाने के लिए तंत्र प्रदान करते हैं। वे तार्किक रूप से संबंधित पहचानकर्ताओं को संबंधित नामस्थानों में समूहीकृत करने का साधन प्रदान करते हैं, जिससे सिस्टम अधिक [[प्रतिरूपकता (प्रोग्रामिंग)]] बन जाता है।
बड़े [[कंप्यूटर प्रोग्राम]] या दस्तावेजों में सैकड़ों या हजारों पहचानकर्ताओं का होना आम बात है। नामस्थान (या इसी तरह की तकनीक, #अनुसरण नामस्थान देखें) स्थानीय पहचानकर्ताओं को छिपाने के लिए तंत्र प्रदान करते हैं। वे तार्किक रूप से संबंधित पहचानकर्ताओं को संबंधित नामस्थानों में समूहीकृत करने का साधन प्रदान करते हैं, जिससे सिस्टम अधिक [[प्रतिरूपकता (प्रोग्रामिंग)]] बन जाता है।


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


==== सामान्य भाषाओं में प्रयोग करें ====
==== सामान्य भाषाओं में प्रयोग करें ====


== सी ==
== सी ==
[[C99]] के बाद से C (प्रोग्रामिंग लैंग्वेज) में नामस्थान के रूप में अनाम स्ट्रक्चर्स का उपयोग करना संभव है।<syntaxhighlight lang="d">
[[C99]] के बाद से C (प्रोग्रामिंग भाषा) में नामस्थान के रूप में अस्पष्ट संरचनाएं का उपयोग करना संभव है।<syntaxhighlight lang="d">
// helper.c
// helper.c
static int _add(int a, int b) {
static int _add(int a, int b) {
Line 245: Line 244:


== सी ++ ==
== सी ++ ==
सी ++ में, नेमस्पेस को नेमस्पेस ब्लॉक के साथ परिभाषित किया गया है।<ref>{{cite web|url=http://www.cplusplus.com/doc/tutorial/namespaces/ |title=Namespaces allow to group entities like classes, objects and functions under a name. |publisher=Cplusplus.com |access-date=2011-07-26}}</ref><syntaxhighlight lang="d">
सी ++ में, नामस्थान को नामस्थान खंड के साथ परिभाषित किया गया है।<ref>{{cite web|url=http://www.cplusplus.com/doc/tutorial/namespaces/ |title=Namespaces allow to group entities like classes, objects and functions under a name. |publisher=Cplusplus.com |access-date=2011-07-26}}</ref><syntaxhighlight lang="d">
namespace abc {
namespace abc {
     int bar;
     int bar;
}
}
</syntaxhighlight>
</syntaxhighlight>
इस ब्लॉक के भीतर, पहचानकर्ताओं का ठीक उसी तरह उपयोग किया जा सकता है जैसे वे घोषित किए गए हैं। इस ब्लॉक के बाहर, नामस्थान विनिर्देशक को उपसर्ग किया जाना चाहिए। उदाहरण के लिए, के बाहर <code>namespace abc</code>, <code>bar</code> लिखा जाना चाहिए <code>abc::bar</code> पहुँचा जाना है। सी ++ में और निर्माण शामिल है जो इस शब्दाडंबर को अनावश्यक बनाता है। लाइन जोड़कर<syntaxhighlight lang="d">
इस खंड के भीतर, पहचानकर्ताओं का ठीक उसी तरह उपयोग किया जा सकता है जैसे वे घोषित किए गए हैं। इस खंड के बाहर, नामस्थान विनिर्देशक को उपसर्ग किया जाना चाहिए। उदाहरण के लिए, <code>namespace</code>, के बाहर <code>abc</code> <code>bar</code> को अभिगम करने के लिए <code>abc::bar</code> लिखा जाना चाहिए। सी ++ में एक और निर्माण शामिल है जो इस शब्दाडंबर को अनावश्यक बनाता है। लाइन जोड़कर<syntaxhighlight lang="d">
using namespace abc;
using namespace abc;
</syntaxhighlight>कोड का टुकड़ा, उपसर्ग <code>abc::</code> अब जरूरत नहीं है।
</syntaxhighlight>कोड का टुकड़ा, उपसर्ग <code>abc::</code> अब जरूरत नहीं है।
Line 256: Line 255:
पहचानकर्ता जिन्हें स्पष्ट रूप से किसी नामस्थान में घोषित नहीं किया जाता है, उन्हें वैश्विक नामस्थान में माना जाता है।<syntaxhighlight lang="d">
पहचानकर्ता जिन्हें स्पष्ट रूप से किसी नामस्थान में घोषित नहीं किया जाता है, उन्हें वैश्विक नामस्थान में माना जाता है।<syntaxhighlight lang="d">
int foo;
int foo;
</syntaxhighlight>इन पहचानकर्ताओं का उपयोग ठीक उसी तरह किया जा सकता है जैसे वे घोषित किए गए हैं, या, चूंकि वैश्विक नाम स्थान का नाम नहीं है, नामस्थान विनिर्देशक <code>::</code> उपसर्ग किया जा सकता है। उदाहरण के लिए, <code>foo</code> भी लिखा जा सकता है <code>::foo</code>.
</syntaxhighlight>इन पहचानकर्ताओं का उपयोग ठीक उसी तरह किया जा सकता है जैसे वे घोषित किए गए हैं, या, चूंकि वैश्विक नाम स्थान का नाम नहीं है, नामस्थान विनिर्देशक <code>::</code> उपसर्ग किया जा सकता है। उदाहरण के लिए, <code>foo</code> को <code>::foo</code> भी लिखा जा सकता है।


सी ++ में नेमस्पेस रिज़ॉल्यूशन पदानुक्रमित है। इसका मतलब है कि काल्पनिक नाम स्थान के भीतर <code>food::soup</code>, पहचानकर्ता <code>chicken</code> का अर्थ है <code>food::soup::chicken</code>. अगर <code>food::soup::chicken</code> मौजूद नहीं है, यह तब संदर्भित करता है <code>food::chicken</code>. यदि कोई नहीं <code>food::soup::chicken</code> और न <code>food::chicken</code> अस्तित्व, <code>chicken</code> का अर्थ है <code>::chicken</code>, वैश्विक नाम स्थान में पहचानकर्ता।
सी ++ में नामस्थान रिज़ॉल्यूशन पदानुक्रमित है। इसका मतलब है कि काल्पनिक नाम स्थान के भीतर <code>food::soup</code>, पहचानकर्ता <code>chicken</code> का अर्थ है <code>food::soup::chicken</code>को संदर्भित करता है। यदि <code>food::soup::chicken</code> मौजूद नहीं है, तो यह <code>food::chicken</code> को संदर्भित करता है यदि न तो <code>food::soup::chicken</code> और न <code>food::chicken</code> मौजूद है, तो <code>chicken</code><code>::chicken</code> को संदर्भित करता है, जो वैश्विक नाम स्थान में एक पहचानकर्ता है।


नामकरण टकराव से बचने के लिए सी ++ में नामस्थान अक्सर उपयोग किए जाते हैं। हालांकि हाल ही के C++ कोड में नामस्थानों का बड़े पैमाने पर उपयोग किया जाता है, अधिकांश पुराने कोड इस सुविधा का उपयोग नहीं करते हैं क्योंकि यह भाषा के शुरुआती संस्करणों में मौजूद नहीं था। उदाहरण के लिए, संपूर्ण C++ मानक पुस्तकालय के भीतर परिभाषित किया गया है <code>namespace std</code>, लेकिन मानकीकरण से पहले कई घटक मूल रूप से वैश्विक नामस्थान में थे। प्रोग्रामर सम्मिलित कर सकता है <code>using</code> नेमस्पेस रिज़ॉल्यूशन आवश्यकताओं को बायपास करने और पुराने कोड के साथ पश्चगामी संगतता प्राप्त करने का निर्देश जो सभी पहचानकर्ताओं को वैश्विक नामस्थान में होने की अपेक्षा करता है। हालांकि का उपयोग <code>using</code> पश्चगामी अनुकूलता (जैसे, सुविधा) के अलावा अन्य कारणों के लिए निर्देश को अच्छे कोड अभ्यासों के विरुद्ध माना जाता है।
नामकरण टकराव से बचने के लिए सी ++ में नामस्थान अक्सर उपयोग किए जाते हैं। हालांकि हाल ही के C++ कोड में नामस्थानों का बड़े पैमाने पर उपयोग किया जाता है, अधिकांश पुराने कोड इस सुविधा का उपयोग नहीं करते हैं क्योंकि यह भाषा के शुरुआती संस्करणों में मौजूद नहीं था। उदाहरण के लिए, संपूर्ण C++ मानक पुस्तकालय के भीतर परिभाषित किया गया है <code>namespace std</code>, लेकिन मानकीकरण से पहले कई घटक मूल रूप से वैश्विक नामस्थान में थे। प्रोग्रामर सम्मिलित कर सकता है <code>using</code> नामस्थान रिज़ॉल्यूशन आवश्यकताओं को बायपास करने और पुराने कोड के साथ पश्चगामी संगतता प्राप्त करने का निर्देश जो सभी पहचानकर्ताओं को वैश्विक नामस्थान में होने की अपेक्षा करता है। हालांकि का उपयोग <code>using</code> पश्चगामी अनुकूलता (जैसे, सुविधा) के अलावा अन्य कारणों के लिए निर्देश को अच्छे कोड अभ्यासों के विरुद्ध माना जाता है।


===== जावा ===
===जावा ===
जावा (प्रोग्रामिंग लैंग्वेज) में, नेमस्पेस का विचार [[जावा पैकेज]] में सन्निहित है। सभी कोड पैकेज के अंतर्गत आते हैं, हालाँकि उस पैकेज को स्पष्ट रूप से नाम देने की आवश्यकता नहीं है। उदाहरण के लिए उपयुक्त पहचानकर्ता से पहले पैकेज नाम को उपसर्ग करके अन्य पैकेजों से कोड का उपयोग किया जाता है <code>class String</code> में <code>package [[java.lang]]</code> कहा जा सकता है <code>java.lang.String</code> (इसे पूरी तरह योग्य नाम के रूप में जाना जाता है)सी ++ की तरह, जावा संरचना प्रदान करता है जो पैकेज नाम टाइप करने के लिए अनावश्यक बनाता है (<code>import</code>). हालाँकि, कुछ विशेषताओं (जैसे [[प्रतिबिंब (कंप्यूटर विज्ञान)]]) के लिए प्रोग्रामर को पूरी तरह से योग्य नाम का उपयोग करने की आवश्यकता होती है।
जावा (प्रोग्रामिंग भाषा) में, नामस्थान का विचार [[जावा पैकेज]] में सन्निहित है। सभी कोड पैकेज के अंतर्गत आते हैं, हालाँकि उस पैकेज को स्पष्ट रूप से नाम देने की आवश्यकता नहीं है। उदाहरण के लिए उपयुक्त पहचानकर्ता से पहले पैकेज नाम को उपसर्ग करके अन्य पैकेजों से कोड का उपयोग किया जाता है, उदाहरण के लिए <code>package [[java.lang]]</code> में <code>class String</code> को <code>java.lang.String</code> (इसे पूरी तरह योग्य नाम के रूप में जाना जाता है) के रूप में संदर्भित किया जा सकता है। सी ++ की तरह, जावा संरचना प्रदान करता है जो पैकेज नाम (<code>import</code>) टाइप करने के लिए अनावश्यक बनाता है। हालाँकि, कुछ विशेषताओं (जैसे [[प्रतिबिंब (कंप्यूटर विज्ञान)]]) के लिए प्रोग्रामर को पूरी तरह से योग्य नाम का उपयोग करने की आवश्यकता होती है।


सी ++ के विपरीत, जावा में नामस्थान श्रेणीबद्ध नहीं हैं जहां तक ​​​​भाषा के वाक्य-विन्यास का संबंध है। हालाँकि, संकुल को पदानुक्रमित तरीके से नामित किया गया है। उदाहरण के लिए, से शुरू होने वाले सभी पैकेज <code>java</code> [[जावा मंच]] का हिस्सा हैं—पैकेज {{Javadoc:SE|package=java.lang|java/lang}} भाषा के लिए कक्षाएं कोर शामिल हैं, और {{Javadoc:SE|package=java.lang.reflect|java/lang/reflect}} विशेष रूप से प्रतिबिंब से संबंधित मुख्य वर्ग शामिल हैं।
सी ++ के विपरीत, जावा में नामस्थान श्रेणीबद्ध नहीं हैं जहां तक ​​​​भाषा के वाक्य-विन्यास का संबंध है। हालाँकि, संकुल को पदानुक्रमित तरीके से नामित किया गया है। उदाहरण के लिए, से शुरू होने वाले सभी पैकेज <code>java</code> [[जावा मंच]] का हिस्सा हैं—पैकेज {{Javadoc:SE|package=java.lang|java/lang}} भाषा के लिए कक्षाएं कोर शामिल हैं, और {{Javadoc:SE|package=java.lang.reflect|java/lang/reflect}} विशेष रूप से प्रतिबिंब से संबंधित मुख्य वर्ग शामिल हैं।


जावा (और [[एडा (प्रोग्रामिंग भाषा)]] में, सी शार्प (प्रोग्रामिंग भाषा) | सी #, और अन्य), नामस्थान/पैकेज कोड की सिमेंटिक श्रेणियों को व्यक्त करते हैं। उदाहरण के लिए, सी # में, <code>namespace System</code> सिस्टम (.NET फ्रेमवर्क) द्वारा प्रदान किया गया कोड शामिल है। ये श्रेणियां कितनी विशिष्ट हैं और भाषा से भाषा में पदानुक्रम कितने गहरे हैं।
जावा (और [[एडा (प्रोग्रामिंग भाषा)]] में, नामस्थान/पैकेज कोड की सिमेंटिक श्रेणियों को व्यक्त करते हैं। उदाहरण के लिए, सी # में, <code>namespace System</code> सिस्टम (.NET फ्रेमवर्क) द्वारा प्रदान किया गया कोड शामिल है। ये श्रेणियां कितनी विशिष्ट हैं और भाषा से भाषा में पदानुक्रम कितने गहरे हैं।


फ़ंक्शन (प्रोग्रामिंग) और क्लास (कंप्यूटर साइंस) [[गुंजाइश (प्रोग्रामिंग)]] को अंतर्निहित नामस्थान के रूप में देखा जा सकता है जो कि दृश्यता, पहुंच और [[वस्तु जीवनकाल]] के साथ अटूट रूप से जुड़ा हुआ है।
फ़ंक्शन (प्रोग्रामिंग) और क्लास (कंप्यूटर साइंस) [[गुंजाइश (प्रोग्रामिंग)|स्कोप्स (प्रोग्रामिंग)]] को अंतर्निहित नामस्थान के रूप में देखा जा सकता है जो कि दृश्यता, पहुंच और [[वस्तु जीवनकाल]] के साथ अटूट रूप से जुड़ा हुआ है।


== सी # ==
== सी # ==
C# भाषा में नेमस्पेस का अत्यधिक उपयोग किया जाता है। अधिक स्पष्ट रूप से उपयोग करने और अव्यवस्था से बचने के लिए सभी .NET फ्रेमवर्क क्लासेस नेमस्पेस में आयोजित की जाती हैं। इसके अलावा, कस्टम नेमस्पेस का प्रोग्रामर द्वारा बड़े पैमाने पर उपयोग किया जाता है, दोनों अपने काम को व्यवस्थित करने और नामकरण टकराव से बचने के लिए।
C# भाषा में नामस्थान का अत्यधिक उपयोग किया जाता है। अधिक स्पष्ट रूप से उपयोग करने और अव्यवस्था से बचने के लिए सभी .NET फ्रेमवर्क क्लासेस नामस्थान में आयोजित की जाती हैं। इसके अलावा, कस्टम नामस्थान का प्रोग्रामर द्वारा बड़े पैमाने पर उपयोग किया जाता है, दोनों अपने काम को व्यवस्थित करने और नामकरण टकराव से बचने के लिए।
किसी वर्ग का संदर्भ देते समय, किसी को या तो उसका पूर्ण रूप से योग्य नाम निर्दिष्ट करना चाहिए, जिसका अर्थ है कि नाम स्थान के बाद वर्ग का नाम,<syntaxhighlight lang="d">
किसी वर्ग का संदर्भ देते समय, किसी को या तो उसका पूर्ण रूप से योग्य नाम निर्दिष्ट करना चाहिए, जिसका अर्थ है कि नाम स्थान के बाद वर्ग का नाम,<syntaxhighlight lang="d">
System.Console.WriteLine("Hello World!");
System.Console.WriteLine("Hello World!");
Line 281: Line 280:
Console.WriteLine("Hello World!");
Console.WriteLine("Hello World!");
int i = Convert.ToInt32("123");
int i = Convert.ToInt32("123");
</syntaxhighlight>उपरोक्त उदाहरणों में, सिस्टम नामस्थान है, और कंसोल और कन्वर्ट सिस्टम के भीतर परिभाषित वर्ग हैं।
</syntaxhighlight>उपरोक्त उदाहरणों में, सिस्टम नामस्थान है, और सांत्वना और परिवर्तन सिस्टम के भीतर परिभाषित वर्ग हैं।


=== पायथन ===
=== पायथन ===
पायथन (प्रोग्रामिंग लैंग्वेज) में, नेमस्पेस को अलग-अलग मॉड्यूल द्वारा परिभाषित किया जाता है, और चूंकि मॉड्यूल को पदानुक्रमित पैकेजों में समाहित किया जा सकता है, तो नामस्थान भी पदानुक्रमित होते हैं।<ref>{{cite web|title=6. Modules|url=https://docs.python.org/tutorial/modules.html|work=The Python Tutorial|publisher=Python Software Foundation|access-date=25 October 2010}}</ref><ref>{{cite web|url=https://docs.python.org/tutorial/classes.html#python-scopes-and-namespaces |title=Python Scopes and Namespaces |publisher=Docs.python.org |access-date=2011-07-26}}</ref>
पायथन (प्रोग्रामिंग भाषा) में, नामस्थान को अलग-अलग मॉड्यूल द्वारा परिभाषित किया जाता है, और चूंकि मॉड्यूल को पदानुक्रमित पैकेजों में समाहित किया जा सकता है, तो नामस्थान भी पदानुक्रमित होते हैं।<ref>{{cite web|title=6. Modules|url=https://docs.python.org/tutorial/modules.html|work=The Python Tutorial|publisher=Python Software Foundation|access-date=25 October 2010}}</ref><ref>{{cite web|url=https://docs.python.org/tutorial/classes.html#python-scopes-and-namespaces |title=Python Scopes and Namespaces |publisher=Docs.python.org |access-date=2011-07-26}}</ref>
सामान्य तौर पर जब मॉड्यूल आयात किया जाता है तो मॉड्यूल में परिभाषित नाम उस मॉड्यूल के नामस्थान के माध्यम से परिभाषित किए जाते हैं, और पूरी तरह से योग्य नाम का उपयोग कर कॉलिंग मॉड्यूल से एक्सेस किए जाते हैं।<syntaxhighlight lang="d">
सामान्य तौर पर जब मॉड्यूल आयात किया जाता है तो मॉड्यूल में परिभाषित नाम उस मॉड्यूल के नामस्थान के माध्यम से परिभाषित किए जाते हैं, और पूरी तरह से योग्य नाम का उपयोग कर कॉलिंग मॉड्यूल से अभिगम किए जाते हैं।<syntaxhighlight lang="d">
# assume modulea defines two functions : func1() and func2() and one class : Class1
# assume modulea defines two functions : func1() and func2() and one class : Class1
import Modulea
import Modulea
Line 292: Line 291:
Modulea.func2()
Modulea.func2()
a = Modulea.Class1()
a = Modulea.Class1()
</syntaxhighlight><code>from ... import ...</code> e> स्टेटमेंट का उपयोग प्रासंगिक नामों को सीधे कॉलिंग मॉड्यूल के नेमस्पेस में सम्मिलित करने के लिए किया जा सकता है, और उन नामों को कॉलिंग मॉड्यूल से योग्य नाम के बिना एक्सेस किया जा सकता है:<syntaxhighlight lang="d">
</syntaxhighlight><code>from ... import ...</code> स्टेटमेंट का उपयोग प्रासंगिक नामों को सीधे कॉलिंग मॉड्यूल के नामस्थान में सम्मिलित करने के लिए किया जा सकता है, और उन नामों को कॉलिंग मॉड्यूल से योग्य नाम के बिना अभिगम किया जा सकता है:<syntaxhighlight lang="d">
# assume Modulea defines two functions : func1() and func2() and one class : Class1
# assume Modulea defines two functions : func1() and func2() and one class : Class1
from Modulea import func1
from Modulea import func1
Line 301: Line 300:
</syntaxhighlight>चूंकि यह सीधे नामों का आयात करता है (योग्यता के बिना) यह मौजूदा नामों को बिना किसी चेतावनी के अधिलेखित कर सकता है।
</syntaxhighlight>चूंकि यह सीधे नामों का आयात करता है (योग्यता के बिना) यह मौजूदा नामों को बिना किसी चेतावनी के अधिलेखित कर सकता है।


कथन का विशेष रूप है <code>from ... import *</code> जो नामित पैकेज में परिभाषित सभी नामों को सीधे कॉलिंग मॉड्यूल के नेमस्पेस में आयात करता है। आयात के इस रूप का उपयोग, हालांकि भाषा के भीतर समर्थित है, आम तौर पर हतोत्साहित किया जाता है क्योंकि यह कॉलिंग मॉड्यूल के नाम स्थान को प्रदूषित करता है और नाम की गड़बड़ी के मामले में पहले से परिभाषित नामों को अधिलेखित कर देगा।<ref>https://docs.python.org/3/tutorial/modules.html "in general the practice of importing * from a module or package is frowned upon"</ref>
कथन का विशेष रूप <code>from ... import *</code> है, जो नामित पैकेज में परिभाषित सभी नामों को सीधे कॉलिंग मॉड्यूल के नामस्थान में आयात करता है। आयात के इस रूप का उपयोग, हालांकि भाषा के भीतर समर्थित है, आम तौर पर हतोत्साहित किया जाता है क्योंकि यह कॉलिंग मॉड्यूल के नाम स्थान को प्रदूषित करता है और नाम की अव्यवस्था के मामले में पहले से परिभाषित नामों को अधिलेखित कर देगा।<ref>https://docs.python.org/3/tutorial/modules.html "in general the practice of importing * from a module or package is frowned upon"</ref>


पायथन भी समर्थन करता है <code>import x as y</code> कॉलिंग मॉड्यूल द्वारा उपयोग के लिए उपनाम या वैकल्पिक नाम प्रदान करने के तरीके के रूप में:<syntaxhighlight lang="d">
पायथन भी समर्थन करता है <code>import x as y</code> कॉलिंग मॉड्यूल द्वारा उपयोग के लिए उपनाम या वैकल्पिक नाम प्रदान करने के तरीके के रूप में:<syntaxhighlight lang="d">
Line 309: Line 308:
</syntaxhighlight>
</syntaxhighlight>


===== एक्सएमएल नेमस्पेस =====
===== एक्सएमएल नामस्थान =====
{{Main|XML namespace}}
{{Main|एक्सएमएल नामस्थान
[[एक्सएमएल]] में, एक्सएमएल नेमस्पेस विनिर्देश प्रोग्रामिंग भाषाओं में नेमस्पेस की भूमिका के समान, एक्सएमएल दस्तावेज़ में तत्वों और विशेषताओं के नामों को अद्वितीय बनाने में सक्षम बनाता है। एक्सएमएल नेमस्पेस का उपयोग करते हुए, एक्सएमएल दस्तावेज़ों में से अधिक एक्सएमएल शब्दावली से तत्व या विशेषता नाम शामिल हो सकते हैं।
 
मुख्य लेख: एक्सएमएल नेमस्पेस}}
[[एक्सएमएल]] में, एक्सएमएल नामस्थान विनिर्देश प्रोग्रामिंग भाषाओं में नामस्थान की भूमिका के समान, एक्सएमएल दस्तावेज़ में तत्वों और विशेषताओं के नामों को अद्वितीय बनाने में सक्षम बनाता है। एक्सएमएल नामस्थान का उपयोग करते हुए, एक्सएमएल दस्तावेज़ों में से अधिक एक्सएमएल शब्दावली से तत्व या विशेषता नाम शामिल हो सकते हैं।


===== पीएचपी =====
===== पीएचपी =====
नेमस्पेस को संस्करण 5.3 के बाद से [[Php]] में पेश किया गया था। कक्षाओं, कार्यों और चरों के नामकरण टकराव से बचा जा सकता है।
नामस्थान को संस्करण 5.3 के बाद से [[Php|पीएचपी]] में पेश किया गया था। कक्षाओं, कार्यों और चरों के नामकरण टकराव से बचा जा सकता है।
[[PHP]] में, नेमस्पेस को नेमस्पेस ब्लॉक के साथ परिभाषित किया गया है।<syntaxhighlight lang="d">
[[PHP|पीएचपी]] में, नामस्थान को नामस्थान खंड के साथ परिभाषित किया गया है।<syntaxhighlight lang="d">
# File phpstar/foobar.php
# File phpstar/foobar.php


Line 332: Line 333:
     }
     }
}
}
</syntaxhighlight>हम निम्नलिखित विभिन्न तरीकों से PHP नेमस्पेस का संदर्भ दे सकते हैं:<syntaxhighlight lang="d">
</syntaxhighlight>हम निम्नलिखित विभिन्न तरीकों से पीएचपी नामस्थान का संदर्भ दे सकते हैं:<syntaxhighlight lang="d">
# File index.php
# File index.php


Line 354: Line 355:
</syntaxhighlight>
</syntaxhighlight>


===नामस्थानों का अनुकरण ===
===नामस्थानों का अनुकरण asasasa ===
नामस्थानों के लिए भाषा समर्थन की कमी वाली प्रोग्रामिंग भाषाओं में, [[पहचानकर्ता नामकरण सम्मेलन]] का उपयोग करके नामस्थानों को कुछ हद तक अनुकरण किया जा सकता है। उदाहरण के लिए, सी (प्रोग्रामिंग भाषा) पुस्तकालय जैसे कि [[libpng]] अक्सर सभी कार्यों और चरों के लिए निश्चित उपसर्ग का उपयोग करते हैं जो उनके खुले इंटरफ़ेस का हिस्सा हैं। Libpng पहचानकर्ताओं को उजागर करता है जैसे:<syntaxhighlight lang="d">
नामस्थानों के लिए भाषा समर्थन की कमी वाली प्रोग्रामिंग भाषाओं में, [[पहचानकर्ता नामकरण सम्मेलन]] का उपयोग करके नामस्थानों को कुछ हद तक अनुकरण किया जा सकता है। उदाहरण के लिए, सी (प्रोग्रामिंग भाषा) पुस्तकालय जैसे कि [[libpng]] अक्सर सभी कार्यों और चरों के लिए निश्चित उपसर्ग का उपयोग करते हैं जो उनके खुले इंटरफ़ेस का हिस्सा हैं। Libpng पहचानकर्ताओं को उजागर करता है जैसे:<syntaxhighlight lang="d">
png_create_write_struct
png_create_write_struct
Line 363: Line 364:


इस तकनीक में कई कमियां हैं:
इस तकनीक में कई कमियां हैं:
* यह नेस्टेड नेमस्पेस के लिए अच्छी तरह से स्केल नहीं करता है; पहचानकर्ता अत्यधिक लंबे हो जाते हैं क्योंकि पहचानकर्ताओं के सभी उपयोग पूरी तरह से योग्य नाम | पूरी तरह से नामस्थान-योग्य होने चाहिए।
* यह नेस्टेड नामस्थान के लिए अच्छी तरह से स्केल नहीं करता है; पहचानकर्ता अत्यधिक लंबे हो जाते हैं क्योंकि पहचानकर्ताओं के सभी उपयोग पूरी तरह से योग्य नाम | पूरी तरह से नामस्थान-योग्य होने चाहिए।
* व्यक्ति या संगठन असंगत नामकरण परंपराओं का उपयोग कर सकते हैं, संभावित रूप से अवांछित अस्पष्टता का परिचय दे सकते हैं।
* व्यक्ति या संगठन असंगत नामकरण परंपराओं का उपयोग कर सकते हैं, संभावित रूप से अवांछित अस्पष्टता का परिचय दे सकते हैं।
* पहचानकर्ताओं के समूहों पर कंपाउंड या क्वेरी-आधारित संचालन, नामस्थानों के आधार पर, जिसमें वे घोषित किए गए हैं, बोझिल या अक्षम्य हैं।
* पहचानकर्ताओं के समूहों पर कंपाउंड या क्वेरी-आधारित संचालन, नामस्थानों के आधार पर, जिसमें वे घोषित किए गए हैं, बोझिल या अक्षम्य हैं।
Line 384: Line 385:
* [[लाइब्रेरी ऑफ कांग्रेस क्लासिफिकेशन]]
* [[लाइब्रेरी ऑफ कांग्रेस क्लासिफिकेशन]]
* [[स्टार कैटलॉग]] और खगोलीय नामकरण परंपराएं
* [[स्टार कैटलॉग]] और खगोलीय नामकरण परंपराएं
* [[एक्सएमएल नेमस्पेस]]
* [[एक्सएमएल नेमस्पेस|एक्सएमएल नामस्थान]]
* [[तर्क-निर्भर नाम लुकअप]]
* [[तर्क-निर्भर नाम लुकअप]]



Revision as of 08:30, 24 February 2023

कम्प्यूटिंग में, नामस्थान संकेतों (नामों) का सेट है जो विभिन्न प्रकार की वस्तुओं को पहचानने और संदर्भित करने के लिए उपयोग किया जाता है। नामस्थान यह सुनिश्चित करता है कि दिए गए ऑब्जेक्ट्स के सभी सेट के अद्वितीय नाम हों ताकि उन्हें आसानी से पहचाना जा सकें।

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

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

इसी तरह, पदानुक्रमित (कंप्यूटिंग) फाइल सिस्टम फाइलों को निर्देशिकाओं में व्यवस्थित करते हैं। प्रत्येक निर्देशिका अलग नामस्थान है, ताकि निर्देशिका पत्र और चालान दोनों में जेन की फ़ाइल हो सकती है।

कंप्यूटर प्रोग्रामिंग में, नामस्थान आमतौर पर विशेष कार्यक्षमता के आसपास प्रतीकों और पहचानकर्ताओं को समूहीकृत करने के उद्देश्य से और ही नाम साझा करने वाले कई पहचानकर्ताओं के बीच नाम टकराव से बचने के लिए नियोजित होते हैं।

नेटवर्किंग में, डोमेन की नामांकन प्रणाली वेबसाइटों (और अन्य संसाधनों) को श्रेणीबद्ध नामस्थानों में व्यवस्थित करता है।

नाम विरोध

तत्व के नाम डेवलपर द्वारा परिभाषित किए गए हैं। विभिन्न एक्सएमएल अनुप्रयोगों से एक्सएमएल दस्तावेज़ों को मिलाने का प्रयास करते समय यह अक्सर विरोध का कारण बनता है।

इस एक्सएमएल में एचटीएमएल तालिका की जानकारी होती है:

<table>
    <tr>
        <td>Apples</td>
        <td>Oranges</td>
    </tr>
</table>

इस एक्सएमएल में तालिका (फर्नीचर) (यानी फर्नीचर का टुकड़ा) के बारे में जानकारी है:

<table>
    <name>African Coffee Table</name>
    <width>80</width>
    <length>120</length>
</table>

यदि इन एक्सएमएल अंशों को साथ जोड़ा गया था, तो नाम विरोध होगा। दोनों में ‎<table>...‎</table> तत्व होता हैं, लेकिन तत्वों की सामग्री और अर्थ भिन्न होते हैं।

एक्सएमएल पार्सर को यह नहीं पता होगा कि इन अंतरों को कैसे नियंत्रित किया जाए।

उपसर्ग के माध्यम से समाधान

एक्सएमएल में नाम के विरोध को नाम उपसर्ग के प्रयोग से आसानी से टाला जा सकता है।

निम्नलिखित एक्सएमएल तत्वों की शुरुआत में एच और एफ उपसर्ग करके एचटीएमएल तालिका और फर्नीचर के बारे में जानकारी के बीच अंतर करता है।

<h:table>
    <h:tr>
        <h:td>Apples</h:td>
        <h:td>Oranges</h:td>
    </h:tr>
</h:table>

<f:table>
    <f:name>African Coffee Table</f:name>
    <f:width>80</f:width>
    <f:length>120</f:length>
</f:table>

नामकरण प्रणाली

नाम स्थान में नाम में नाम स्थान का नाम और स्थानीय नाम होता है।[5][6] नामस्थान नाम आमतौर पर स्थानीय नाम के लिए उपसर्ग (कंप्यूटर विज्ञान) के रूप में लागू किया जाता है।

संवर्धित बैकस-नौर रूप में:

name = <namespace name> separator <local name>

जब स्थानीय नामों का स्वयं उपयोग किया जाता है, तो नाम संकल्प (प्रोग्रामिंग भाषा) का उपयोग यह तय करने के लिए किया जाता है कि कौन सा (यदि कोई है) विशेष नाम किसी विशेष स्थानीय नाम से संकेतित है।

उदाहरण

नामस्थान में नामों के उदाहरण
संदर्भ नाम नामस्थान नाम स्थानीय नाम
पथ /home/user/readme.txt /home/user (directory) readme.txt (file name)
डोमेन नाम www.example.com example.com (domain name) www (leaf domain name)
सी ++ std::array std (C++ namespace) array (struct)
यूएन/लोकोड US NYC US (country or territory) NYC (locality)
एक्सएमएल xmlns:xhtml="http://www.w3.org/1999/xhtml"
<xhtml:body>
xhtml (previously declared XML namespace xhtml="http://www.w3.org/1999/xhtml") body (element)
पर्ल $DBI::errstr $DBI (Perl module) errstr (variable)
जावा java.util.Date java.util (Java namespace) Date (class)
समान संसाधन का नाम (यूआरएन) urn:nbn:fi-fe19991055 urn:nbn (National Bibliography Numbers) fi-fe19991055
संचलन प्रणाली 10.1000/182 10 (handle naming authority) 1000/182 (handle local name)
डिजिटल ऑब्जेक्ट पहचानकर्ता 10.1000/182 10.1000 (publisher) 182 (publication)
मैक पता 01-23-45-67-89-ab 01-23-45 (organizationally unique identifier) 67-89-ab (NIC specific)
पीसीआई आईडी 1234 abcd 1234 (vendor ID) abcd (device ID)
यूएसबी वीआईडी/पीआईडी 2341 003f[7] 2341 (vendor ID) 003f (product ID)
स्पार्कल dbr:Sydney dbr (previously declared ontology, e.g. by specifying @prefix dbr: <http://dbpedia.org/resource/>) Sydney


प्रतिनिधिमंडल

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

पदानुक्रम

नामकरण योजना जो तृतीय पक्षों को नामस्थानों के उप-प्रत्यायोजन की अनुमति देती है, श्रेणीबद्ध नामस्थान है।

पदानुक्रम पुनरावर्ती है यदि नामस्थान नामों के लिए सिंटैक्स प्रत्येक उप-प्रतिनिधि के लिए समान है। पुनरावर्ती पदानुक्रम का उदाहरण डोमेन नाम है।

गैर-पुनरावर्ती पदानुक्रम का उदाहरण समान संसाधन का नाम है जो इंटरनेट असाइन किए गए नंबर अथॉरिटी (आईएएनए) नंबर का प्रतिनिधित्व करता है।

urn:isbn:978-3-16-148410-0 के लिए श्रेणीबद्ध नामस्थान विश्लेषण, कार्ल पॉपर द्वारा द लॉजिक ऑफ़ साइंटिफिक डिस्कवरी पुस्तक के लिए एक पहचानकर्ता, 10वां संस्करण।
लेखागार पंजीकरण उदाहरण पहचानकर्ता नामस्थान नाम नाम स्थान
समान संसाधन का नाम (यूआरएन) इंटरनेट निरुपित नंबर प्राधिकरण urn:isbn:978-3-16-148410-0 यूआरएन औपचारिक यूआरएन नामस्थान
औपचारिक यूआरएन नामस्थान इंटरनेट निरुपित नंबर प्राधिकरण urn:isbn:978-3-16-148410-0 (आईएसबीएन) यूनिफ़ॉर्म रिसोर्स नाम के रूप में अंतर्राष्ट्रीय मानक बुक नंबर
अंतर्राष्ट्रीय अनुच्छेद संख्या (ईएएन) जीएस1 978-3-16-148410-0 978 बुकलैंड
अंतर्राष्ट्रीय मानक पुस्तक संख्या (आईएसबीएन) अंतर्राष्ट्रीय आईएसबीएन एजेंसी 3-16-148410-X 3 जर्मन भाषी देश
जर्मन प्रकाशक कोड एजेंट फर बुचमार्क मानक 3-16-148410-X 16 मोहर सीबेक


नामस्थान बनाम स्कोप

नाम स्थान का नाम नाम के लिए संदर्भ (कंप्यूटर विज्ञान में स्कोप (कंप्यूटर विज्ञान)) प्रदान कर सकता है, और कभी-कभी शब्दों को दूसरे के स्थान पर उपयोग किया जाता है। हालाँकि, किसी नाम का संदर्भ अन्य कारकों द्वारा भी प्रदान किया जा सकता है, जैसे कि वह स्थान जहाँ वह होता है या नाम का वाक्य-विन्यास।

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


प्रोग्रामिंग भाषाओं में

कई प्रोग्रामिंग भाषाओं के लिए, नामस्थान उनके पहचानकर्ता (कंप्यूटर भाषाओं) के लिए संदर्भ है। ऑपरेटिंग सिस्टम में, नामस्थान का उदाहरण पदानुक्रमित है। निर्देशिका में प्रत्येक नाम विशिष्ट रूप से फ़ाइल या उपनिर्देशिका की पहचान करता है।[9]

नियम के रूप में, नामस्थान में नामों के से अधिक अर्थ नहीं हो सकते; अर्थात्, अलग-अलग अर्थ ही नाम को ही नामस्थान में साझा नहीं कर सकते हैं। नामस्थान को संदर्भ (कंप्यूटिंग) भी कहा जाता है, क्योंकि अलग-अलग नामस्थानों में ही नाम के अलग-अलग अर्थ हो सकते हैं, प्रत्येक अपने नामस्थान के लिए उपयुक्त है।

नामस्थान की अन्य विशेषताएँ निम्नलिखित हैं:

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

साथ ही इसके सार भाषा तकनीकी उपयोग जैसा कि ऊपर वर्णित है, कुछ भाषाओं में अन्य उपयोगों के साथ स्पष्ट नाम स्थान नियंत्रण के लिए विशिष्ट कीवर्ड का उपयोग किया जाता है। नीचे C++ में नाम स्थान का उदाहरण दिया गया है:

#include <iostream>

// This is how one brings a name into the current scope.  In this case, it's
// bringing them into global scope.
using std::cout;
using std::endl;

namespace box1 {
    int box_side = 4;
}

namespace box2 {
    int box_side = 12;
}

int main() {
    int box_side = 42;
    cout << box1::box_side << endl;  // Outputs 4.
    cout << box2::box_side << endl;  // Outputs 12.
    cout << box_side << endl;  // Outputs 42.
}

कंप्यूटर-विज्ञान के विचार

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

इस अवधारणा को सादृश्य द्वारा चित्रित किया जा सकता है। कल्पना कीजिए कि दो कंपनियां, एक्स और वाई, प्रत्येक अपने कर्मचारियों को आईडी नंबर प्रदान करती हैं। X के पास ही आईडी नंबर वाले दो कर्मचारी नहीं होने चाहिए, और इसी तरह Y के लिए; लेकिन दोनों कंपनियों में ही आईडी नंबर का इस्तेमाल करना कोई समस्या नहीं है। उदाहरण के लिए, यदि बिल कंपनी X के लिए काम करता है और जेन कंपनी Y के लिए काम करता है, तो उनमें से प्रत्येक के लिए कर्मचारी #123 होना कोई समस्या नहीं है। इस समानता में, आईडी नंबर पहचानकर्ता है, और कंपनी नामस्थान के रूप में कार्य करती है। यह ही पहचानकर्ता के लिए प्रत्येक नामस्थान में अलग व्यक्ति की पहचान करने में समस्या पैदा नहीं करता है।

बड़े कंप्यूटर प्रोग्राम या दस्तावेजों में सैकड़ों या हजारों पहचानकर्ताओं का होना आम बात है। नामस्थान (या इसी तरह की तकनीक, #अनुसरण नामस्थान देखें) स्थानीय पहचानकर्ताओं को छिपाने के लिए तंत्र प्रदान करते हैं। वे तार्किक रूप से संबंधित पहचानकर्ताओं को संबंधित नामस्थानों में समूहीकृत करने का साधन प्रदान करते हैं, जिससे सिस्टम अधिक प्रतिरूपकता (प्रोग्रामिंग) बन जाता है।

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

सामान्य भाषाओं में प्रयोग करें

सी

C99 के बाद से C (प्रोग्रामिंग भाषा) में नामस्थान के रूप में अस्पष्ट संरचनाएं का उपयोग करना संभव है।

// helper.c
static int _add(int a, int b) {
    return a + b;
}

const struct {
    double pi;
    int (*add) (int, int);
} helper = { 3.14, _add };

// helper.h
const struct {
    double pi;
    int (*add) (int, int);
} helper;

// main.c
#include <stdio.h>
#include "helper.h"

int main(){
    printf("3 + 2 = %d\n", helper.add(3, 2));
    printf("pi is %f\n", helper.pi);
}

सी ++

सी ++ में, नामस्थान को नामस्थान खंड के साथ परिभाषित किया गया है।[11]

namespace abc {
    int bar;
}

इस खंड के भीतर, पहचानकर्ताओं का ठीक उसी तरह उपयोग किया जा सकता है जैसे वे घोषित किए गए हैं। इस खंड के बाहर, नामस्थान विनिर्देशक को उपसर्ग किया जाना चाहिए। उदाहरण के लिए, namespace, के बाहर abc bar को अभिगम करने के लिए abc::bar लिखा जाना चाहिए। सी ++ में एक और निर्माण शामिल है जो इस शब्दाडंबर को अनावश्यक बनाता है। लाइन जोड़कर

using namespace abc;

कोड का टुकड़ा, उपसर्ग abc:: अब जरूरत नहीं है। पहचानकर्ता जिन्हें स्पष्ट रूप से किसी नामस्थान में घोषित नहीं किया जाता है, उन्हें वैश्विक नामस्थान में माना जाता है।

int foo;

इन पहचानकर्ताओं का उपयोग ठीक उसी तरह किया जा सकता है जैसे वे घोषित किए गए हैं, या, चूंकि वैश्विक नाम स्थान का नाम नहीं है, नामस्थान विनिर्देशक :: उपसर्ग किया जा सकता है। उदाहरण के लिए, foo को ::foo भी लिखा जा सकता है।

सी ++ में नामस्थान रिज़ॉल्यूशन पदानुक्रमित है। इसका मतलब है कि काल्पनिक नाम स्थान के भीतर food::soup, पहचानकर्ता chicken का अर्थ है food::soup::chickenको संदर्भित करता है। यदि food::soup::chicken मौजूद नहीं है, तो यह food::chicken को संदर्भित करता है यदि न तो food::soup::chicken और न food::chicken मौजूद है, तो chicken::chicken को संदर्भित करता है, जो वैश्विक नाम स्थान में एक पहचानकर्ता है।

नामकरण टकराव से बचने के लिए सी ++ में नामस्थान अक्सर उपयोग किए जाते हैं। हालांकि हाल ही के C++ कोड में नामस्थानों का बड़े पैमाने पर उपयोग किया जाता है, अधिकांश पुराने कोड इस सुविधा का उपयोग नहीं करते हैं क्योंकि यह भाषा के शुरुआती संस्करणों में मौजूद नहीं था। उदाहरण के लिए, संपूर्ण C++ मानक पुस्तकालय के भीतर परिभाषित किया गया है namespace std, लेकिन मानकीकरण से पहले कई घटक मूल रूप से वैश्विक नामस्थान में थे। प्रोग्रामर सम्मिलित कर सकता है using नामस्थान रिज़ॉल्यूशन आवश्यकताओं को बायपास करने और पुराने कोड के साथ पश्चगामी संगतता प्राप्त करने का निर्देश जो सभी पहचानकर्ताओं को वैश्विक नामस्थान में होने की अपेक्षा करता है। हालांकि का उपयोग using पश्चगामी अनुकूलता (जैसे, सुविधा) के अलावा अन्य कारणों के लिए निर्देश को अच्छे कोड अभ्यासों के विरुद्ध माना जाता है।

जावा

जावा (प्रोग्रामिंग भाषा) में, नामस्थान का विचार जावा पैकेज में सन्निहित है। सभी कोड पैकेज के अंतर्गत आते हैं, हालाँकि उस पैकेज को स्पष्ट रूप से नाम देने की आवश्यकता नहीं है। उदाहरण के लिए उपयुक्त पहचानकर्ता से पहले पैकेज नाम को उपसर्ग करके अन्य पैकेजों से कोड का उपयोग किया जाता है, उदाहरण के लिए package java.lang में class String को java.lang.String (इसे पूरी तरह योग्य नाम के रूप में जाना जाता है) के रूप में संदर्भित किया जा सकता है। सी ++ की तरह, जावा संरचना प्रदान करता है जो पैकेज नाम (import) टाइप करने के लिए अनावश्यक बनाता है। हालाँकि, कुछ विशेषताओं (जैसे प्रतिबिंब (कंप्यूटर विज्ञान)) के लिए प्रोग्रामर को पूरी तरह से योग्य नाम का उपयोग करने की आवश्यकता होती है।

सी ++ के विपरीत, जावा में नामस्थान श्रेणीबद्ध नहीं हैं जहां तक ​​​​भाषा के वाक्य-विन्यास का संबंध है। हालाँकि, संकुल को पदानुक्रमित तरीके से नामित किया गया है। उदाहरण के लिए, से शुरू होने वाले सभी पैकेज java जावा मंच का हिस्सा हैं—पैकेज java.lang भाषा के लिए कक्षाएं कोर शामिल हैं, और java.lang.reflect विशेष रूप से प्रतिबिंब से संबंधित मुख्य वर्ग शामिल हैं।

जावा (और एडा (प्रोग्रामिंग भाषा) में, नामस्थान/पैकेज कोड की सिमेंटिक श्रेणियों को व्यक्त करते हैं। उदाहरण के लिए, सी # में, namespace System सिस्टम (.NET फ्रेमवर्क) द्वारा प्रदान किया गया कोड शामिल है। ये श्रेणियां कितनी विशिष्ट हैं और भाषा से भाषा में पदानुक्रम कितने गहरे हैं।

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

सी #

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

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

System.Console.WriteLine("Hello World!");
int i = System.Convert.ToInt32("123");

या उपयोग कथन जोड़ें। यह उस नामस्थान में सभी वर्गों के पूर्ण नाम का उल्लेख करने की आवश्यकता को समाप्त करता है।

using System;

Console.WriteLine("Hello World!");
int i = Convert.ToInt32("123");

उपरोक्त उदाहरणों में, सिस्टम नामस्थान है, और सांत्वना और परिवर्तन सिस्टम के भीतर परिभाषित वर्ग हैं।

पायथन

पायथन (प्रोग्रामिंग भाषा) में, नामस्थान को अलग-अलग मॉड्यूल द्वारा परिभाषित किया जाता है, और चूंकि मॉड्यूल को पदानुक्रमित पैकेजों में समाहित किया जा सकता है, तो नामस्थान भी पदानुक्रमित होते हैं।[12][13]

सामान्य तौर पर जब मॉड्यूल आयात किया जाता है तो मॉड्यूल में परिभाषित नाम उस मॉड्यूल के नामस्थान के माध्यम से परिभाषित किए जाते हैं, और पूरी तरह से योग्य नाम का उपयोग कर कॉलिंग मॉड्यूल से अभिगम किए जाते हैं।

# assume modulea defines two functions : func1() and func2() and one class : Class1
import Modulea

Modulea.func1()
Modulea.func2()
a = Modulea.Class1()

from ... import ... स्टेटमेंट का उपयोग प्रासंगिक नामों को सीधे कॉलिंग मॉड्यूल के नामस्थान में सम्मिलित करने के लिए किया जा सकता है, और उन नामों को कॉलिंग मॉड्यूल से योग्य नाम के बिना अभिगम किया जा सकता है:

# assume Modulea defines two functions : func1() and func2() and one class : Class1
from Modulea import func1

func1()
func2() # this will fail as an undefined name, as will the full name Modulea.func2()
a = Class1() # this will fail as an undefined name, as will the full name Modulea.Class1()

चूंकि यह सीधे नामों का आयात करता है (योग्यता के बिना) यह मौजूदा नामों को बिना किसी चेतावनी के अधिलेखित कर सकता है।

कथन का विशेष रूप from ... import * है, जो नामित पैकेज में परिभाषित सभी नामों को सीधे कॉलिंग मॉड्यूल के नामस्थान में आयात करता है। आयात के इस रूप का उपयोग, हालांकि भाषा के भीतर समर्थित है, आम तौर पर हतोत्साहित किया जाता है क्योंकि यह कॉलिंग मॉड्यूल के नाम स्थान को प्रदूषित करता है और नाम की अव्यवस्था के मामले में पहले से परिभाषित नामों को अधिलेखित कर देगा।[14]

पायथन भी समर्थन करता है import x as y कॉलिंग मॉड्यूल द्वारा उपयोग के लिए उपनाम या वैकल्पिक नाम प्रदान करने के तरीके के रूप में:

import numpy as np

a = np.arange(1000)
एक्सएमएल नामस्थान

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

पीएचपी

नामस्थान को संस्करण 5.3 के बाद से पीएचपी में पेश किया गया था। कक्षाओं, कार्यों और चरों के नामकरण टकराव से बचा जा सकता है।

पीएचपी में, नामस्थान को नामस्थान खंड के साथ परिभाषित किया गया है।

# File phpstar/foobar.php

namespace phpstar;

class FooBar
{
    public function foo(): void
    {
        echo 'Hello world, from function foo';
    }

    public function bar(): void
    {
        echo 'Hello world, from function bar';
    }
}

हम निम्नलिखित विभिन्न तरीकों से पीएचपी नामस्थान का संदर्भ दे सकते हैं:

# File index.php

# Include the file
include "phpstar/foobar.php";

# Option 1: directly prefix the class name with the namespace
$obj_foobar = new \phpstar\FooBar();

# Option 2: import the namespace
use phpstar\FooBar;
$obj_foobar = new FooBar();

# Option 2a: import & alias the namespace
use phpstar\FooBar as FB;
$obj_foobar = new FB();

# Access the properties and methods with regular way
$obj_foobar->foo();
$obj_foobar->bar();

नामस्थानों का अनुकरण asasasa

नामस्थानों के लिए भाषा समर्थन की कमी वाली प्रोग्रामिंग भाषाओं में, पहचानकर्ता नामकरण सम्मेलन का उपयोग करके नामस्थानों को कुछ हद तक अनुकरण किया जा सकता है। उदाहरण के लिए, सी (प्रोग्रामिंग भाषा) पुस्तकालय जैसे कि libpng अक्सर सभी कार्यों और चरों के लिए निश्चित उपसर्ग का उपयोग करते हैं जो उनके खुले इंटरफ़ेस का हिस्सा हैं। Libpng पहचानकर्ताओं को उजागर करता है जैसे:

png_create_write_struct
png_get_signature
png_read_row
png_set_invalid

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

इस तकनीक में कई कमियां हैं:

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

कई फायदे हैं:

  • स्रोत-कोड फ़ाइलों में नामों का पता लगाने के लिए किसी विशेष सॉफ़्टवेयर टूल की आवश्यकता नहीं होती है। पकड़ की तरह साधारण कार्यक्रम पर्याप्त है।
  • कोई नामस्थान नाम विरोध नहीं है।
  • नाम-परेशान करने की कोई आवश्यकता नहीं है, और इस प्रकार संभावित असंगति की कोई समस्या नहीं है।

यह भी देखें

संदर्भ

  1. Adya, Atul; Bolosky, William; Castro, Miguel; Cermak, Gerald; Chaiken, Ronnie; Douceur, John; Howell, Jon; Lorch, Jacob; Theimer, Marvin; Wattenhofer, Roger (2002). FARSITE: Federated, Available, and Reliable Storage for an Incompletely Trusted Environment (PDF). Proc. USENIX Symp. on Operating Systems Design and Implementation. Archived from the original (PDF) on 2010-07-28. The primary construct established by a file system is a hierarchical directory namespace, which is the logical repository for files.
  2. "C# FAQ: What is a namespace". C# Online Net. Archived from the original on 2013-10-20. Retrieved 2010-02-23. A namespace is nothing but a group of assemblies, classes, or types. A namespace acts as a container—like a disk folder—for classes organized into groups usually based on functionality. C# namespace syntax allows namespaces to be nested.
  3. "An overview of namespaces in PHP". PHP Manual. What are namespaces? In the broadest definition, namespaces are a way of encapsulating items. This can be seen as an abstract concept in many places. For example, in any operating system directories serve to group related files, and act as a namespace for the files within them.
  4. "Creating and Using Packages". Java Documentation. Oracle. A package is a grouping of related types providing access protection and name space management. Note that types refers to classes, interfaces, enumerations, and annotation types. Enumerations and annotation types are special kinds of classes and interfaces, respectively, so types are often referred to in this lesson simply as classes and interfaces.[better source needed]
  5. XML Core Working Group (8 December 2009). "Namespaces in XML 1.0 (Third Edition)". W3C. Retrieved 2012-03-30.
  6. Moats, Ryan (May 1997). "Syntax". URN Syntax. IETF. p. 1. sec. 2. doi:10.17487/RFC2141. RFC 2141. Retrieved 2012-03-30.
  7. Stephen J. Gowdy. "List of USB ID's". 2013.
  8. Sollins & Masinter (December 1994). "Requirements for functional capabilities". Functional Requirements for Uniform Resource Names. IETF. p. 3. sec. 2. doi:10.17487/RFC1731. RFC 1731. Retrieved 2012-03-30.
  9. "C# FAQ: What is a namespace". C# Online Net. Archived from the original on October 20, 2013. Retrieved 2010-02-23. For instance, [under Windows], to access the built-in input-output (I/O) classes and members, use the System.IO namespace. Or, to access Web-related classes and members, use the System.Web namespace.
  10. "A namespace is "a logical grouping of the names used within a program."". Webopedia.com. 10 April 2002. Retrieved 2011-07-26.
  11. "Namespaces allow to group entities like classes, objects and functions under a name". Cplusplus.com. Retrieved 2011-07-26.
  12. "6. Modules". The Python Tutorial. Python Software Foundation. Retrieved 25 October 2010.
  13. "Python Scopes and Namespaces". Docs.python.org. Retrieved 2011-07-26.
  14. https://docs.python.org/3/tutorial/modules.html "in general the practice of importing * from a module or package is frowned upon"
  15. Danny Kalev. "Why I Hate Namespaces". Archived from the original on 2016-07-09.{{cite web}}: CS1 maint: bot: original URL status unknown (link)