नेमस्पेस

From Vigyanwiki

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

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

नेमस्पेसों के प्रमुख उदाहरणों में फाइल प्रणाली सम्मिलित हैं, जो फाइलों को नाम प्रदान करते हैं।[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();

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

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

png_create_write_struct
png_get_signature
png_read_row
png_set_invalid

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

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

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