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

From Vigyanwiki
(Created page with "{{Self reference|For the use of namespaces in Wikipedia, see Wikipedia:Namespace.}} {{for|a feature of the Linux kernel|Linux namespaces}} {{short description|Container fo...")
 
No edit summary
Line 2: Line 2:
{{for|a feature of the Linux kernel|Linux namespaces}}
{{for|a feature of the Linux kernel|Linux namespaces}}
{{short description|Container for a set of identifiers}}
{{short description|Container for a set of identifiers}}
[[कम्प्यूटिंग]] में, एक नामस्थान संकेतों (''नाम'') का एक सेट है जो विभिन्न प्रकार की वस्तुओं को पहचानने और संदर्भित करने के लिए उपयोग किया जाता है। एक नेमस्पेस यह सुनिश्चित करता है कि दिए गए सभी ऑब्जेक्ट्स के सेट में अद्वितीय नाम हों ताकि वे आसानी से [[पहचानकर्ता]] बन सकें।
[[कम्प्यूटिंग]] में, नामस्थान संकेतों (''नाम'') का सेट है जो विभिन्न प्रकार की वस्तुओं को पहचानने और संदर्भित करने के लिए उपयोग किया जाता है। नेमस्पेस यह सुनिश्चित करता है कि दिए गए सभी ऑब्जेक्ट्स के सेट में अद्वितीय नाम हों ताकि वे आसानी से [[पहचानकर्ता]] बन सकें।


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


नामस्थानों के प्रमुख उदाहरणों में [[फाइल सिस्टम]] शामिल हैं, जो फाइलों को नाम प्रदान करते हैं।<ref>{{cite conference
नामस्थानों के प्रमुख उदाहरणों में [[फाइल सिस्टम]] शामिल हैं, जो फाइलों को नाम प्रदान करते हैं।<ref>{{cite conference
Line 38: Line 38:
[[संगणक संजाल]] और वितरित सिस्टम संसाधनों को नाम देते हैं, जैसे कंप्यूटर, प्रिंटर, [[वेबसाइट]] और रिमोट फाइल्स। वर्चुअलाइजेशन [[ओएस-स्तरीय वर्चुअलाइजेशन]] का समर्थन करने के लिए [[ऑपरेटिंग सिस्टम]] पृथक नामस्थानों द्वारा कर्नेल संसाधनों को विभाजित कर सकते हैं।
[[संगणक संजाल]] और वितरित सिस्टम संसाधनों को नाम देते हैं, जैसे कंप्यूटर, प्रिंटर, [[वेबसाइट]] और रिमोट फाइल्स। वर्चुअलाइजेशन [[ओएस-स्तरीय वर्चुअलाइजेशन]] का समर्थन करने के लिए [[ऑपरेटिंग सिस्टम]] पृथक नामस्थानों द्वारा कर्नेल संसाधनों को विभाजित कर सकते हैं।


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


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


नेटवर्किंग में, [[डोमेन की नामांकन प्रणाली]] वेबसाइटों (और अन्य संसाधनों) को श्रेणीबद्ध नामस्थानों में व्यवस्थित करता है।
नेटवर्किंग में, [[डोमेन की नामांकन प्रणाली]] वेबसाइटों (और अन्य संसाधनों) को श्रेणीबद्ध नामस्थानों में व्यवस्थित करता है।
Line 50: Line 50:
<वाक्यविन्यास प्रकाश लैंग = एक्सएमएल>
<वाक्यविन्यास प्रकाश लैंग = एक्सएमएल>
<टेबल>
<टेबल>
     <tr>
      
        <td>सेब</td>
सेब
        <td>संतरा</td>
संतरा
     </tr>
      
</ टेबल>
</ टेबल>
</वाक्यविन्यास हाइलाइट>
</वाक्यविन्यास हाइलाइट>
इस एक्सएमएल में [[टेबल (फर्नीचर)]] (यानी फर्नीचर का एक टुकड़ा) के बारे में जानकारी है:
इस एक्सएमएल में [[टेबल (फर्नीचर)]] (यानी फर्नीचर का टुकड़ा) के बारे में जानकारी है:
<वाक्यविन्यास प्रकाश लैंग = एक्सएमएल>
<वाक्यविन्यास प्रकाश लैंग = एक्सएमएल>
<टेबल>
<टेबल>
    <नाम>अफ्रीकी कॉफी टेबल</name>
<नाम>अफ्रीकी कॉफी टेबल</name>
    <चौड़ाई>80</चौड़ाई>
<चौड़ाई>80</चौड़ाई>
    <लंबाई>120</लंबाई>
<लंबाई>120</लंबाई>
</ टेबल>
</ टेबल>
</वाक्यविन्यास हाइलाइट>
</वाक्यविन्यास हाइलाइट>


यदि इन XML अंशों को एक साथ जोड़ा गया था, तो एक नाम विरोध होगा। दोनों में एक है {{tag|table}} तत्व, लेकिन तत्वों की अलग सामग्री और अर्थ है।
यदि इन XML अंशों को साथ जोड़ा गया था, तो नाम विरोध होगा। दोनों में है {{tag|table}} तत्व, लेकिन तत्वों की अलग सामग्री और अर्थ है।


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


=== उपसर्ग के माध्यम से समाधान ===
=== उपसर्ग के माध्यम से समाधान ===
Line 91: Line 91:


== नामकरण प्रणाली ==
== नामकरण प्रणाली ==
नाम स्थान में एक नाम में एक नाम स्थान का नाम और एक स्थानीय नाम होता है।<ref>{{cite web | url=http://www.w3.org/TR/REC-xml-names/ | title= Namespaces in XML 1.0 (Third Edition) | author=XML Core Working Group | work=W3C |date=8 December 2009 |access-date=2012-03-30}}</ref><ref>{{cite IETF  |title=URN Syntax |rfc=2141 |sectionname=Syntax |section=2 |page=1 |last= Moats |first= Ryan |date=May 1997 |publisher=[[Internet Engineering Task Force|IETF]] |access-date= 2012-03-30}}</ref> नामस्थान नाम आमतौर पर स्थानीय नाम के लिए एक [[उपसर्ग (कंप्यूटर विज्ञान)]] के रूप में लागू किया जाता है।
नाम स्थान में नाम में नाम स्थान का नाम और स्थानीय नाम होता है।<ref>{{cite web | url=http://www.w3.org/TR/REC-xml-names/ | title= Namespaces in XML 1.0 (Third Edition) | author=XML Core Working Group | work=W3C |date=8 December 2009 |access-date=2012-03-30}}</ref><ref>{{cite IETF  |title=URN Syntax |rfc=2141 |sectionname=Syntax |section=2 |page=1 |last= Moats |first= Ryan |date=May 1997 |publisher=[[Internet Engineering Task Force|IETF]] |access-date= 2012-03-30}}</ref> नामस्थान नाम आमतौर पर स्थानीय नाम के लिए [[उपसर्ग (कंप्यूटर विज्ञान)]] के रूप में लागू किया जाता है।


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


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


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


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


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


{| class=wikitable
{| class=wikitable
Line 166: Line 166:


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


{| class=wikitable
{| class=wikitable
Line 179: Line 179:


== प्रोग्रामिंग भाषाओं में == <!--Anchor for Redirect: [Namespace (computer science). -->
== प्रोग्रामिंग भाषाओं में == <!--Anchor for Redirect: [Namespace (computer science). -->
कई प्रोग्रामिंग भाषाओं के लिए, नामस्थान उनके पहचानकर्ता (कंप्यूटर भाषाओं) के लिए एक संदर्भ है। एक ऑपरेटिंग सिस्टम में, नेमस्पेस का एक उदाहरण एक डायरेक्टरी है। एक निर्देशिका में प्रत्येक नाम विशिष्ट रूप से एक फ़ाइल या उपनिर्देशिका की पहचान करता है।<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>
एक नियम के रूप में, एक नामस्थान में नामों के एक से अधिक अर्थ नहीं हो सकते; अर्थात्, अलग-अलग अर्थ एक ही नाम को एक ही नामस्थान में साझा नहीं कर सकते हैं। एक नामस्थान को एक [[संदर्भ (कंप्यूटिंग)]] भी कहा जाता है, क्योंकि अलग-अलग नामस्थानों में एक ही नाम के अलग-अलग अर्थ हो सकते हैं, प्रत्येक अपने नामस्थान के लिए उपयुक्त है।
नियम के रूप में, नामस्थान में नामों के से अधिक अर्थ नहीं हो सकते; अर्थात्, अलग-अलग अर्थ ही नाम को ही नामस्थान में साझा नहीं कर सकते हैं। नामस्थान को [[संदर्भ (कंप्यूटिंग)]] भी कहा जाता है, क्योंकि अलग-अलग नामस्थानों में ही नाम के अलग-अलग अर्थ हो सकते हैं, प्रत्येक अपने नामस्थान के लिए उपयुक्त है।


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


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


<वाक्यविन्यास लैंग = सीपीपी>
<वाक्यविन्यास लैंग = सीपीपी>
Line 214: Line 214:


===कंप्यूटर-विज्ञान के विचार ===
===कंप्यूटर-विज्ञान के विचार ===
कंप्यूटर विज्ञान में एक नाम स्थान (कभी-कभी नाम का दायरा भी कहा जाता है) एक अमूर्त कंटेनर या पर्यावरण है जो विशिष्ट पहचानकर्ताओं या [[प्रतीक]]ों (अर्थात नाम) के एक तार्किक समूह को धारण करने के लिए बनाया गया है। नामस्थान में परिभाषित एक पहचानकर्ता केवल उस नामस्थान से जुड़ा होता है। एक ही पहचानकर्ता को कई नामस्थानों में स्वतंत्र रूप से परिभाषित किया जा सकता है। अर्थात्, एक नामस्थान में परिभाषित एक पहचानकर्ता का वही अर्थ हो सकता है या नहीं हो सकता है जो दूसरे नामस्थान में परिभाषित समान पहचानकर्ता के रूप में है। नामस्थानों का समर्थन करने वाली भाषाएं उन नियमों को निर्दिष्ट करती हैं जो निर्धारित करते हैं कि कौन सा नामस्थान एक पहचानकर्ता (इसकी परिभाषा नहीं) से संबंधित है।<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 नामस्थान देखें) स्थानीय पहचानकर्ताओं को छिपाने के लिए एक तंत्र प्रदान करते हैं। वे तार्किक रूप से संबंधित पहचानकर्ताओं को संबंधित नामस्थानों में समूहीकृत करने का एक साधन प्रदान करते हैं, जिससे सिस्टम अधिक [[प्रतिरूपकता (प्रोग्रामिंग)]] बन जाता है।
बड़े [[कंप्यूटर प्रोग्राम]] या दस्तावेजों में सैकड़ों या हजारों पहचानकर्ताओं का होना आम बात है। नामस्थान (या इसी तरह की तकनीक, #Emulating नामस्थान देखें) स्थानीय पहचानकर्ताओं को छिपाने के लिए तंत्र प्रदान करते हैं। वे तार्किक रूप से संबंधित पहचानकर्ताओं को संबंधित नामस्थानों में समूहीकृत करने का साधन प्रदान करते हैं, जिससे सिस्टम अधिक [[प्रतिरूपकता (प्रोग्रामिंग)]] बन जाता है।


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


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


== सी ++ ==
== सी ++ ==
सी ++ में, एक नेमस्पेस को नेमस्पेस ब्लॉक के साथ परिभाषित किया गया है।<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>
सी ++ में, नेमस्पेस को नेमस्पेस ब्लॉक के साथ परिभाषित किया गया है।<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>
<वाक्यविन्यास लैंग = सीपीपी>
<वाक्यविन्यास लैंग = सीपीपी>
नामस्थान एबीसी {
नामस्थान एबीसी {
Line 260: Line 260:
}
}
</वाक्यविन्यास हाइलाइट>
</वाक्यविन्यास हाइलाइट>
इस ब्लॉक के भीतर, पहचानकर्ताओं का ठीक उसी तरह उपयोग किया जा सकता है जैसे वे घोषित किए गए हैं। इस ब्लॉक के बाहर, नामस्थान विनिर्देशक को उपसर्ग किया जाना चाहिए। उदाहरण के लिए, के बाहर <code>namespace abc</code>, <code>bar</code> लिखा जाना चाहिए <code>abc::bar</code> पहुँचा जाना है। सी ++ में एक और निर्माण शामिल है जो इस शब्दाडंबर को अनावश्यक बनाता है। लाइन जोड़कर
इस ब्लॉक के भीतर, पहचानकर्ताओं का ठीक उसी तरह उपयोग किया जा सकता है जैसे वे घोषित किए गए हैं। इस ब्लॉक के बाहर, नामस्थान विनिर्देशक को उपसर्ग किया जाना चाहिए। उदाहरण के लिए, के बाहर <code>namespace abc</code>, <code>bar</code> लिखा जाना चाहिए <code>abc::bar</code> पहुँचा जाना है। सी ++ में और निर्माण शामिल है जो इस शब्दाडंबर को अनावश्यक बनाता है। लाइन जोड़कर
<वाक्यविन्यास लैंग = सीपीपी>
<वाक्यविन्यास लैंग = सीपीपी>
नेमस्पेस एबीसी का उपयोग करना;
नेमस्पेस एबीसी का उपयोग करना;
</वाक्यविन्यास हाइलाइट>
</वाक्यविन्यास हाइलाइट>
कोड का एक टुकड़ा, उपसर्ग <code>abc::</code> अब जरूरत नहीं है।
कोड का टुकड़ा, उपसर्ग <code>abc::</code> अब जरूरत नहीं है।


पहचानकर्ता जिन्हें स्पष्ट रूप से किसी नामस्थान में घोषित नहीं किया जाता है, उन्हें वैश्विक नामस्थान में माना जाता है।
पहचानकर्ता जिन्हें स्पष्ट रूप से किसी नामस्थान में घोषित नहीं किया जाता है, उन्हें वैश्विक नामस्थान में माना जाता है।
Line 272: Line 272:
इन पहचानकर्ताओं का उपयोग ठीक उसी तरह किया जा सकता है जैसे वे घोषित किए गए हैं, या, चूंकि वैश्विक नाम स्थान का नाम नहीं है, नामस्थान विनिर्देशक <code>::</code> उपसर्ग किया जा सकता है। उदाहरण के लिए, <code>foo</code> भी लिखा जा सकता है <code>::foo</code>.
इन पहचानकर्ताओं का उपयोग ठीक उसी तरह किया जा सकता है जैसे वे घोषित किए गए हैं, या, चूंकि वैश्विक नाम स्थान का नाम नहीं है, नामस्थान विनिर्देशक <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>class String</code> में <code>package [[java.lang]]</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 फ्रेमवर्क) द्वारा प्रदान किया गया कोड शामिल है। ये श्रेणियां कितनी विशिष्ट हैं और भाषा से भाषा में पदानुक्रम कितने गहरे हैं।
Line 293: Line 293:
</वाक्यविन्यास हाइलाइट>
</वाक्यविन्यास हाइलाइट>


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


<वाक्यविन्यास प्रकाश लैंग = सी #>
<वाक्यविन्यास प्रकाश लैंग = सी #>
Line 302: Line 302:
</वाक्यविन्यास हाइलाइट>
</वाक्यविन्यास हाइलाइट>


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


=== अजगर ===
=== अजगर ===
पायथन (प्रोग्रामिंग लैंग्वेज) में, नेमस्पेस को अलग-अलग मॉड्यूल द्वारा परिभाषित किया जाता है, और चूंकि मॉड्यूल को पदानुक्रमित पैकेजों में समाहित किया जा सकता है, तो नामस्थान भी पदानुक्रमित होते हैं।<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>
सामान्य तौर पर जब एक मॉड्यूल आयात किया जाता है तो मॉड्यूल में परिभाषित नाम उस मॉड्यूल के नामस्थान के माध्यम से परिभाषित किए जाते हैं, और पूरी तरह से योग्य नाम का उपयोग कर कॉलिंग मॉड्यूल से एक्सेस किए जाते हैं।
सामान्य तौर पर जब मॉड्यूल आयात किया जाता है तो मॉड्यूल में परिभाषित नाम उस मॉड्यूल के नामस्थान के माध्यम से परिभाषित किए जाते हैं, और पूरी तरह से योग्य नाम का उपयोग कर कॉलिंग मॉड्यूल से एक्सेस किए जाते हैं।
<वाक्यविन्यास लैंग = अजगर>
<वाक्यविन्यास लैंग = अजगर>
# मान लें कि मॉड्यूल दो कार्यों को परिभाषित करता है: func1 () और func2 () और एक वर्ग: Class1
# मान लें कि मॉड्यूल दो कार्यों को परिभाषित करता है: func1 () और func2 () और वर्ग: Class1
मॉड्यूल आयात करें
मॉड्यूल आयात करें


Line 316: Line 316:
</वाक्यविन्यास हाइलाइट> <code>from ... import ...</code> e> स्टेटमेंट का उपयोग प्रासंगिक नामों को सीधे कॉलिंग मॉड्यूल के नेमस्पेस में सम्मिलित करने के लिए किया जा सकता है, और उन नामों को कॉलिंग मॉड्यूल से योग्य नाम के बिना एक्सेस किया जा सकता है:
</वाक्यविन्यास हाइलाइट> <code>from ... import ...</code> e> स्टेटमेंट का उपयोग प्रासंगिक नामों को सीधे कॉलिंग मॉड्यूल के नेमस्पेस में सम्मिलित करने के लिए किया जा सकता है, और उन नामों को कॉलिंग मॉड्यूल से योग्य नाम के बिना एक्सेस किया जा सकता है:
<वाक्यविन्यास लैंग = अजगर>
<वाक्यविन्यास लैंग = अजगर>
# मान लें कि मॉड्यूल दो कार्यों को परिभाषित करता है: func1 () और func2 () और एक वर्ग: Class1
# मान लें कि मॉड्यूल दो कार्यों को परिभाषित करता है: func1 () और func2 () और वर्ग: Class1
मॉड्यूला आयात func1 से
मॉड्यूला आयात func1 से


func1 ()
func1 ()
func2 () # यह एक अपरिभाषित नाम के रूप में विफल हो जाएगा, जैसा कि पूरा नाम मॉड्यूला होगा। func2 ()
func2 () # यह अपरिभाषित नाम के रूप में विफल हो जाएगा, जैसा कि पूरा नाम मॉड्यूला होगा। func2 ()
a = Class1() # यह एक अपरिभाषित नाम के रूप में विफल हो जाएगा, जैसा कि पूरा नाम मॉड्यूला होगा। Class1 ()
a = Class1() # यह अपरिभाषित नाम के रूप में विफल हो जाएगा, जैसा कि पूरा नाम मॉड्यूला होगा। Class1 ()
</वाक्यविन्यास हाइलाइट>
</वाक्यविन्यास हाइलाइट>
चूंकि यह सीधे नामों का आयात करता है (योग्यता के बिना) यह मौजूदा नामों को बिना किसी चेतावनी के अधिलेखित कर सकता है।
चूंकि यह सीधे नामों का आयात करता है (योग्यता के बिना) यह मौजूदा नामों को बिना किसी चेतावनी के अधिलेखित कर सकता है।


कथन का एक विशेष रूप है <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> कॉलिंग मॉड्यूल द्वारा उपयोग के लिए उपनाम या वैकल्पिक नाम प्रदान करने के तरीके के रूप में:
पायथन भी समर्थन करता है <code>import x as y</code> कॉलिंग मॉड्यूल द्वारा उपयोग के लिए उपनाम या वैकल्पिक नाम प्रदान करने के तरीके के रूप में:


Line 336: Line 336:
===== एक्सएमएल नेमस्पेस <!-- This section is linked from [[XML]] --> =====
===== एक्सएमएल नेमस्पेस <!-- This section is linked from [[XML]] --> =====
{{Main|XML namespace}}
{{Main|XML namespace}}
[[एक्सएमएल]] में, एक्सएमएल नेमस्पेस विनिर्देश प्रोग्रामिंग भाषाओं में नेमस्पेस की भूमिका के समान, एक्सएमएल दस्तावेज़ में तत्वों और विशेषताओं के नामों को अद्वितीय बनाने में सक्षम बनाता है। एक्सएमएल नेमस्पेस का उपयोग करते हुए, एक्सएमएल दस्तावेज़ों में एक से अधिक एक्सएमएल शब्दावली से तत्व या विशेषता नाम शामिल हो सकते हैं।
[[एक्सएमएल]] में, एक्सएमएल नेमस्पेस विनिर्देश प्रोग्रामिंग भाषाओं में नेमस्पेस की भूमिका के समान, एक्सएमएल दस्तावेज़ में तत्वों और विशेषताओं के नामों को अद्वितीय बनाने में सक्षम बनाता है। एक्सएमएल नेमस्पेस का उपयोग करते हुए, एक्सएमएल दस्तावेज़ों में से अधिक एक्सएमएल शब्दावली से तत्व या विशेषता नाम शामिल हो सकते हैं।


===== पीएचपी <!-- This section is linked from [[PHP]] --> =====
===== पीएचपी <!-- This section is linked from [[PHP]] --> =====
नेमस्पेस को संस्करण 5.3 के बाद से [[Php]] में पेश किया गया था। कक्षाओं, कार्यों और चरों के नामकरण टकराव से बचा जा सकता है।
नेमस्पेस को संस्करण 5.3 के बाद से [[Php]] में पेश किया गया था। कक्षाओं, कार्यों और चरों के नामकरण टकराव से बचा जा सकता है।
[[PHP]] में, एक नेमस्पेस को नेमस्पेस ब्लॉक के साथ परिभाषित किया गया है।
[[PHP]] में, नेमस्पेस को नेमस्पेस ब्लॉक के साथ परिभाषित किया गया है।
<वाक्यविन्यास लैंग = php>
<वाक्यविन्यास लैंग = php>
# फ़ाइल phpstar/foobar.php
# फ़ाइल phpstar/foobar.php
Line 359: Line 359:
}
}
</वाक्यविन्यास हाइलाइट>
</वाक्यविन्यास हाइलाइट>
हम निम्नलिखित विभिन्न तरीकों से एक PHP नेमस्पेस का संदर्भ दे सकते हैं:
हम निम्नलिखित विभिन्न तरीकों से PHP नेमस्पेस का संदर्भ दे सकते हैं:
<वाक्यविन्यास लैंग = php>
<वाक्यविन्यास लैंग = php>
# फ़ाइल index.php
# फ़ाइल index.php
Line 383: Line 383:


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


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


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

Revision as of 14:16, 22 February 2023

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

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

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

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

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

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

नाम विरोध

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

इस XML में HTML टेबल की जानकारी होती है: <वाक्यविन्यास प्रकाश लैंग = एक्सएमएल> <टेबल>

सेब संतरा

</ टेबल> </वाक्यविन्यास हाइलाइट> इस एक्सएमएल में टेबल (फर्नीचर) (यानी फर्नीचर का टुकड़ा) के बारे में जानकारी है: <वाक्यविन्यास प्रकाश लैंग = एक्सएमएल> <टेबल> <नाम>अफ्रीकी कॉफी टेबल</name> <चौड़ाई>80</चौड़ाई> <लंबाई>120</लंबाई> </ टेबल> </वाक्यविन्यास हाइलाइट>

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

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

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

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

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

<वाक्यविन्यास प्रकाश लैंग = एक्सएमएल>

<एच: टेबल>

   <एच: टीआर>
       <h:td>सेब</h:td>
       <h:td>संतरा</h:td>
   </एच:टीआर>

</एच: टेबल>

<च तालिका>

   <f:name>अफ्रीकी कॉफी टेबल</f:name>
   <f:चौड़ाई>80</f:चौड़ाई>
   <f:लंबाई>120</f:लंबाई>

</च: टेबल> </वाक्यविन्यास हाइलाइट>

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

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

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

नाम = <नाम स्थान का नाम> विभाजक <स्थानीय नाम>

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

उदाहरण

Examples of names in a namespace
Context Name Namespace name Local name
Path /home/user/readme.txt /home/user (directory) readme.txt (file name)
Domain name www.example.com example.com (domain name) www (leaf domain name)
C++ std::array std (C++ namespace) array (struct)
UN/LOCODE US NYC US (country or territory) NYC (locality)
XML xmlns:xhtml="http://www.w3.org/1999/xhtml"
<xhtml:body>
xhtml (previously declared XML namespace xhtml="http://www.w3.org/1999/xhtml") body (element)
Perl $DBI::errstr $DBI (Perl module) errstr (variable)
Java java.util.Date java.util (Java namespace) Date (class)
Uniform Resource Name (URN) urn:nbn:fi-fe19991055 urn:nbn (National Bibliography Numbers) fi-fe19991055
Handle System 10.1000/182 10 (handle naming authority) 1000/182 (handle local name)
Digital object identifier 10.1000/182 10.1000 (publisher) 182 (publication)
MAC address 01-23-45-67-89-ab 01-23-45 (organizationally unique identifier) 67-89-ab (NIC specific)
PCI ID 1234 abcd 1234 (vendor ID) abcd (device ID)
USB VID/PID 2341 003f[7] 2341 (vendor ID) 003f (product ID)
SPARQL dbr:Sydney dbr (previously declared ontology, e.g. by specifying @prefix dbr: <http://dbpedia.org/resource/>) Sydney


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

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

पदानुक्रम

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

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

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

Hierarchical namespace breakdown for urn:isbn:978-3-16-148410-0, an identifier for the book The Logic of Scientific Discovery by Karl Popper, 10th edition.
Registry Registrar Example Identifier Namespace name Namespace
Uniform Resource Name (URN) Internet Assigned Numbers Authority urn:isbn:978-3-16-148410-0 urn Formal URN namespace
Formal URN namespace Internet Assigned Numbers Authority urn:isbn:978-3-16-148410-0 ISBN International Standard Book Numbers as Uniform Resource Names
International Article Number (EAN) GS1 978-3-16-148410-0 978 Bookland
International Standard Book Number (ISBN) International ISBN Agency 3-16-148410-X 3 German-speaking countries
German publisher code Agentur für Buchmarktstandards 3-16-148410-X 16 Mohr Siebeck


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

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

Examples of naming systems with local and global scope, and with and without namespaces
Without a namespace With a namespace
Local scope Vehicle registration plate Filesystem Hierarchy Standard
Global scope Universally unique identifier Domain Name System


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

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

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

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

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

<वाक्यविन्यास लैंग = सीपीपी>

  1. शामिल <iostream>

// इस प्रकार कोई नाम वर्तमान दायरे में लाता है। इस मामले में, यह है // उन्हें वैश्विक दायरे में लाना। एसटीडी का उपयोग :: अदालत; एसटीडी का उपयोग :: endl;

नेमस्पेस बॉक्स1 {

   इंट बॉक्स_साइड = 4;

}

नेमस्पेस बॉक्स2 {

   इंट बॉक्स_साइड = 12;

}

मुख्य प्रवेश बिंदु() {

   इंट बॉक्स_साइड = 42;
   cout << box1::box_side << endl; // आउटपुट 4।
   cout << box2::box_side << endl; // आउटपुट 12।
   cout << box_side << endl; // आउटपुट 42।

} </वाक्यविन्यास हाइलाइट>

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

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

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

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

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

सी

C99 के बाद से C (प्रोग्रामिंग लैंग्वेज) में नामस्थान के रूप में अनाम स्ट्रक्चर्स का उपयोग करना संभव है। <वाक्यविन्यास प्रकाश लैंग = सी> // हेल्पर.सी स्टेटिक इंट _एड (इंट ए, इंट बी) {

   वापसी ए + बी;

}

स्थिरांक संरचना {

   डबल पाई;
   इंट (* जोड़ें) (इंट, इंट);

} सहायक = {3.14, _जोड़};

// हेल्पर.एच स्थिरांक संरचना {

   डबल पाई;
   इंट (* जोड़ें) (इंट, इंट);

} सहायक;

// मुख्य सी

  1. शामिल <stdio.h>
  2. शामिल हेल्पर.एच

मुख्य प्रवेश बिंदु(){

   प्रिंटफ (3 + 2 =% डी \ n, हेल्पर। ऐड (3, 2));
   प्रिंटफ (पीआई% एफ \ n, हेल्पर.पीआई है);

}

</वाक्यविन्यास हाइलाइट>

सी ++

सी ++ में, नेमस्पेस को नेमस्पेस ब्लॉक के साथ परिभाषित किया गया है।[11] <वाक्यविन्यास लैंग = सीपीपी> नामस्थान एबीसी {

   इंट बार;

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

पहचानकर्ता जिन्हें स्पष्ट रूप से किसी नामस्थान में घोषित नहीं किया जाता है, उन्हें वैश्विक नामस्थान में माना जाता है। <वाक्यविन्यास लैंग = सीपीपी> इंट फू; </वाक्यविन्यास हाइलाइट> इन पहचानकर्ताओं का उपयोग ठीक उसी तरह किया जा सकता है जैसे वे घोषित किए गए हैं, या, चूंकि वैश्विक नाम स्थान का नाम नहीं है, नामस्थान विनिर्देशक :: उपसर्ग किया जा सकता है। उदाहरण के लिए, 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 पश्चगामी अनुकूलता (जैसे, सुविधा) के अलावा अन्य कारणों के लिए निर्देश को अच्छे कोड अभ्यासों के विरुद्ध माना जाता है।

== जावा

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

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

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

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

सी #

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

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

<वाक्यविन्यास प्रकाश लैंग = सी #> सिस्टम का उपयोग करना;

कंसोल.राइटलाइन (हैलो वर्ल्ड!); int i = Convert.ToInt32 (123); </वाक्यविन्यास हाइलाइट>

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

अजगर

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

  1. मान लें कि मॉड्यूल दो कार्यों को परिभाषित करता है: func1 () और func2 () और वर्ग: Class1

मॉड्यूल आयात करें

मॉड्यूला.func1 () मॉड्यूला.func2 () ए = मॉड्यूल। क्लास 1 () </वाक्यविन्यास हाइलाइट> from ... import ... e> स्टेटमेंट का उपयोग प्रासंगिक नामों को सीधे कॉलिंग मॉड्यूल के नेमस्पेस में सम्मिलित करने के लिए किया जा सकता है, और उन नामों को कॉलिंग मॉड्यूल से योग्य नाम के बिना एक्सेस किया जा सकता है: <वाक्यविन्यास लैंग = अजगर>

  1. मान लें कि मॉड्यूल दो कार्यों को परिभाषित करता है: func1 () और func2 () और वर्ग: Class1

मॉड्यूला आयात func1 से

func1 () func2 () # यह अपरिभाषित नाम के रूप में विफल हो जाएगा, जैसा कि पूरा नाम मॉड्यूला होगा। func2 () a = Class1() # यह अपरिभाषित नाम के रूप में विफल हो जाएगा, जैसा कि पूरा नाम मॉड्यूला होगा। Class1 () </वाक्यविन्यास हाइलाइट> चूंकि यह सीधे नामों का आयात करता है (योग्यता के बिना) यह मौजूदा नामों को बिना किसी चेतावनी के अधिलेखित कर सकता है।

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

<वाक्यविन्यास प्रकाश लैंग = सुन्न> Numpy को np के रूप में आयात करें

ए = एनपी.अरेंज (1000) </वाक्यविन्यास हाइलाइट>

एक्सएमएल नेमस्पेस

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

पीएचपी

नेमस्पेस को संस्करण 5.3 के बाद से Php में पेश किया गया था। कक्षाओं, कार्यों और चरों के नामकरण टकराव से बचा जा सकता है। PHP में, नेमस्पेस को नेमस्पेस ब्लॉक के साथ परिभाषित किया गया है। <वाक्यविन्यास लैंग = php>

  1. फ़ाइल phpstar/foobar.php

नेमस्पेस phpstar;

वर्ग फूबार {

   सार्वजनिक समारोह फू (): शून्य
   {
       इको 'हैलो वर्ल्ड, फंक्शन फू से';
   }
   सार्वजनिक फ़ंक्शन बार (): शून्य
   {
       इको 'हैलो वर्ल्ड, फंक्शन बार से';
   }

} </वाक्यविन्यास हाइलाइट> हम निम्नलिखित विभिन्न तरीकों से PHP नेमस्पेस का संदर्भ दे सकते हैं: <वाक्यविन्यास लैंग = php>

  1. फ़ाइल index.php
  1. फ़ाइल शामिल करें

phpstar/foobar.php शामिल करें;

  1. विकल्प 1: सीधे नाम स्थान के साथ वर्ग का नाम उपसर्ग करें

$obj_foobar = नया \phpstar\FooBar();

  1. विकल्प 2: नामस्थान आयात करें

phpstar \ FooBar का प्रयोग करें; $obj_foobar = नया FooBar();

  1. विकल्प 2a: नामस्थान को आयात और उपनाम करें

एफबी के रूप में phpstar \ FooBar का उपयोग करें; $obj_foobar = नया एफबी ();

  1. गुणों और विधियों को नियमित रूप से एक्सेस करें

$obj_foobar->foo(); $obj_foobar->बार(); </वाक्यविन्यास हाइलाइट>

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

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

png_create_write_struct
png_get_signature
png_read_row
png_set_अमान्य

यह नामकरण प्रथा (प्रोग्रामिंग) उचित आश्वासन प्रदान करती है कि पहचानकर्ता अद्वितीय हैं और इसलिए बड़े कार्यक्रमों में टकराव के नामकरण के बिना उपयोग किया जा सकता है।[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)