आरक्षित शब्द

From Vigyanwiki

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

एक निकट से संबंधित और प्रायः मिश्रित धारणा एक कीवर्ड है, जो एक विशेष संदर्भ में विशेष अर्थ वाला शब्द है। यह सिमेंटिक (कंप्यूटर विज्ञान) की परिभाषा है। इसके विपरीत, एक मानक लाइब्रेरी में नाम लेकिन भाषा में निर्मित नहीं होने पर आरक्षित शब्द या कीवर्ड नहीं माने जाते हैं। आरक्षित शब्द और कीवर्ड प्रायः एक दूसरे के स्थान पर उपयोग किए जाते हैं - कोई कह सकता है कि एक आरक्षित शब्द एक कीवर्ड के रूप में उपयोग के लिए आरक्षित है - और औपचारिक उपयोग भाषा से भाषा में भिन्न होता है; इस लेख के लिए हम ऊपर के रूप में भेद करते हैं।

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

भेद

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

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

इसके विपरीत, कीवर्ड को आरक्षित शब्द नहीं होना चाहिए, उनकी भूमिका संदर्भ से समझी जाती है, या उन्हें दूसरे तरीके से अलग किया जा सकता है, जैसे कि स्ट्रैपिंग (प्रोग्रामिंग)। उदाहरण के लिए, मुहावरा if = 1 अधिकांश व्याकरणों में असीमित है, क्योंकि if क्लॉज का नियंत्रण स्टेटमेंट a से प्रारंभ नहीं हो सकता है =, और इस प्रकार फोरट्रान जैसी कुछ भाषाओं में इसकी स्वीकृति है। वैकल्पिक रूप से, एल्गोरिथम भाषा 68 में, कीवर्ड को बोल्ड में सूचीबद्ध करके कठिन भाषा में - किसी तरह से अलग करने के लिए चिह्नित किया जाना चाहिए, और इस प्रकार आरक्षित शब्द नहीं हैं। इस प्रकार कठिन भाषा में निम्नलिखित व्यंजक मान्य है, क्योंकि बोल्ड कीवर्ड if के रूप में सामान्य पहचानकर्ता के साथ अनुरूप नहीं होता है:

if if eq 0 then 1 fi

हालाँकि, एल्गोरिथम भाषा 68 में एक स्ट्रॉपिंग व्यवस्था भी है जिसमें कीवर्ड आरक्षित शब्द हैं, इसका एक उदाहरण है कि ये विशिष्ट अवधारणाएँ प्रायः कैसे समरूप हैं; इसका अनुसरण कई आधुनिक भाषाओं में किया जाता है।

सिंटेक्स

एक आरक्षित शब्द वह है जो एक सामान्य शब्द की तरह दिखता है, लेकिन एक सामान्य शब्द के रूप में प्रयोग करने की स्वीकृति नहीं है। औपचारिक रूप से इसका तात्पर्य यह है कि यह पहचानकर्ताओं के सामान्य शाब्दिक सिंटेक्स (शब्दों का सिंटेक्स) को पूर्ण करता है - उदाहरण के लिए, अक्षरों का एक क्रम होना - लेकिन इसका उपयोग नहीं किया जा सकता है जहाँ पहचानकर्ताओं का उपयोग किया जाता है। उदाहरण के लिए शब्द if सामान्य रूप से एक आरक्षित शब्द है, जबकि x सामान्य रूप से ऐसा नहीं है x = 1 एक मान्य समनुदेशन है, लेकिन if = 1 नहीं है।

कीवर्ड के विभिन्न उपयोग हैं, लेकिन मुख्य रूप से कुछ वर्गों में आते हैं: वाक्यांश व्याकरण का भाग (विशेष रूप से एक उत्पादन (कंप्यूटर विज्ञान) गैर-प्रतीकों के साथ), विभिन्न अर्थों के साथ, प्रायः नियंत्रण संचार के लिए उपयोग किया जाता है, जैसे कि शब्द if अधिकांश प्रक्रियात्मक भाषाओं में, जो एक सशर्त (कंप्यूटर प्रोग्रामिंग) इंगित करता है और भाग (गैर-अंतिम प्रतीक) लेता है; एक प्रारूप प्रणाली का समर्थन करने वाली भाषा में मूल प्रारूप के नाम, जैसे int; मूल शाब्दिक (कंप्यूटर प्रोग्रामिंग) मान जैसे true बूलियन सत्य के लिए; या कभी-कभी विशेष क्रम जैसे exit वाक्यांशों में कीवर्ड के अन्य उपयोग इनपुट/आउटपुट के लिए हैं, जैसे कि print

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

इस स्थिति में आरक्षित शब्दों को शाब्दिक व्याकरण के भाग के रूप में परिभाषित किया गया है, और प्रत्येक पहचानकर्ता से अलग एक अलग प्रकार के रूप में चिन्हित किया गया है। पारंपरिक संकेतन में, आरक्षित शब्द if और then उदाहरण के लिए क्रमशः IF और THEN, प्रकार के रूप में टोकन किए जाते हैं, जबकि x और y दोनों प्रकार Identifierके रूप में टोकनयुक्त होते हैं।

कीवर्ड, इसके विपरीत, वाक्यांश व्याकरण में टर्मिनल प्रतीकों के रूप में वाक्य रचनात्मक रूप से दिखाई देते हैं। उदाहरण के लिए, सशर्त अभिव्यक्ति के लिए उत्पादन नियम IF Expression THEN Expressionहो सकता है। इस स्थिति में IF और THEN टर्मिनल प्रतीक हैं, जिसका अर्थ है "क्रमशः IF या THEN,प्रकार का एक टोकन" - और शाब्दिक व्याकरण के कारण, इसका अर्थ स्ट्रिंग if या then मूल स्रोत में है। मूल स्थिर मान के उदाहरण के रूप में true बूलियन मान ''सत्य'' का प्रतिनिधित्व करने वाला एक कीवर्ड हो सकता है, इंस्टैंस के लिए, इस स्थिति में यह व्याकरण में उत्पादन BinaryExpression, के संभावित विस्तार के रूप में प्रकट होना चाहिए।

आरक्षित श्रेणियां

शब्दों की विशिष्ट सूचियों को आरक्षित करने से परे, कुछ भाषाएँ भविष्य के भाषा संस्करण, विभिन्न भाषाओ, संकलक विक्रेता-विशिष्ट एक्सटेंशन के लिए निजी स्थान के रूप में उपयोग करने के लिए या एक संकलक द्वारा आंतरिक उपयोग के लिए, विशेष रूप से नाम प्रबंधन में, शब्दों की पूरी श्रृंखला आरक्षित करती हैं।

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

पायथन में आंतरिक पहचानकर्ताओं में दोहरे अधोयोजक के निरंतर उपयोग ने संक्षिप्त नाम डंडर को उत्पन्न करता है; यह मार्क जैक्सन द्वारा दिया गया था[3] और स्वतंत्र रूप से टिम होचबर्ग द्वारा,[4] एक दूसरे के मिनटों के अंदर, दोनों ने 2002 में एक ही प्रश्न के उत्तर में दिया था।[5][6]


विशिष्टता

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

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

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

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

C कमेटी यूजर नेम स्पेस में नए कीवर्ड्स नहीं बनाना चयन करती है, क्योंकि सामान्य रूप से यह उपेक्षा की जाती है कि C का प्रत्येक संशोधन पुराने C प्रोग्रामों को खोजने से बच जाएगा। तुलनात्मक रूप से, C++ समिति (WG21) नए खोजशब्दों को पुराने खोजशब्दों की तरह सामान्य-दिखने के लिए प्राथमिकता देती है। उदाहरण के लिए, सी ++ 11 एक थ्रेड के लिए स्थिर भंडारण स्थानीय को नामित करने के लिए एक नया thread_local कीवर्ड परिभाषित करता है। C11 नए कीवर्ड को _Thread_local. के रूप में परिभाषित करता है। नए C11 हैडर <threads.h>, सामान्य-दिखने वाले नाम प्रदान करने के लिए एक मैक्रो परिभाषा है:[10]

#define thread_local _Thread_local

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

पूर्वनिर्धारित नाम

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

कीवर्ड के रूप में क्या प्रदान किया जाता है और पूर्वनिर्धारित क्या है, इस आधार पर भाषाएँ भिन्न होती हैं। कुछ भाषाएं, उदाहरण के लिए, इनपुट/आउटपुट संचालन के लिए कीवर्ड प्रदान करती हैं जबकि अन्य में ये लाइब्रेरी रूटीन हैं। पायथन (प्रोग्रामिंग भाषा) (3.0 से संशोधित के संस्करण) और कई सामान्य भाषाओ में, print एक कीवर्ड है। इसके विपरीत, सी, सूची प्रसंस्करण और पायथन 3.0 समकक्ष printf, format, और print मानक लाइब्रेरी में फंक्शन हैं। इसी तरह, पायथन में 3.0 से संशोधित, None, True, और False पूर्वनिर्धारित वेरिएबल थे, लेकिन आरक्षित शब्द नहीं थे, लेकिन पायथन 3.0 में उन्हें आरक्षित शब्द बना दिया गया था।[11]


परिभाषा

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

जावा (प्रोग्रामिंग भाषा) विशिष्टता कीवर्ड शब्द का उपयोग करती है।[12] C प्रोग्रामिंग भाषा के लिए अंतरराष्ट्रीय मानकीकरण संगठन 9899 मानक कीवर्ड शब्द का उपयोग करता है।[13]

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

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

कुछ भाषाएँ, जैसे कि परिशिष्ट भाग, इस दृष्टिकोण में अत्यंत उदार हैं, जिससे विशिष्ट उद्देश्यों के लिए मुख्य कीवर्ड को फिर से परिभाषित किया जा सकता है।

सामान्य सूची प्रसंस्करण में, कीवर्ड (या कीवर्ड प्रतीक) शब्द का प्रयोग एक विशेष प्रकार के प्रतीक (सूची प्रसंस्करण) या पहचानकर्ता के लिए किया जाता है। अन्य प्रतीकों के विपरीत, जो सामान्य रूप से वेरिएबल या फंक्शनों के लिए होते हैं, कीवर्ड स्व-सूची प्रसंस्करण (प्रोग्रामिंग भाषा) स्व-मूल्यांकन रूपों और उद्धरण और स्व-मूल्यांकन हैं[14]:98 KEYWORD पैकेज इंटर्न करते है।[15] कीवर्ड सामान्य रूप से फंक्शनों के लिए नामित तर्कों को लेबल करने और प्रतीकात्मक मूल्यों का प्रतिनिधित्व करने के लिए उपयोग किए जाते हैं। सामान्य सूची प्रसंस्करण नामक पैकेज में फ़ंक्शंस, वेरिएबल्स, विशेष रूपों और मैक्रोज़ के नाम वाले प्रतीक मूल रूप से आरक्षित शब्द हैं। अमेरिकन राष्ट्रीय मानक संस्थान सामान्य सूची प्रसंस्करण में उन्हें फिर से परिभाषित करने का प्रभाव अपरिभाषित है।[16] उनका बंधन संभव है। उदाहरण के लिए व्यंजक (if if case or) संभव है, कब if एक स्थानीय वेरिएबल है। सबसे बाएं if यह आपकी जानकारी के लिए है if ऑपरेटर; शेष प्रतीकों की व्याख्या वेरिएबल नामों के रूप में की जाती है। चूंकि फंक्शनों और वेरिएबल के लिए एक अलग नामस्थान है, if एक स्थानीय वेरिएबल हो सकता है। सामान्य सूची प्रसंस्करण में, हालांकि, दो विशेष प्रतीक हैं जो कीवर्ड पैकेज में नहीं हैं: प्रतीक t और nil. जब व्यंजक के रूप में मूल्यांकन किया जाता है, तो वे स्वयं का मूल्यांकन करते हैं। उन्हें फंक्शनों या वेरिएबल के नाम के रूप में उपयोग नहीं किया जा सकता है, इसलिए वास्तविक रूप से आरक्षित हैं। (let ((t 42))) एक अच्छी तरह से बनाई गई व्यंजक है, लेकिन let ऑपरेटर उपयोग की स्वीकृति नहीं देगा।

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

मैक्रो (कंप्यूटर विज्ञान) या लेज़ी मूल्यांकन वाली भाषाओं में, नियंत्रण संचार निर्माण जैसे if मैक्रोज़ या फ़ंक्शंस के रूप में क्रियान्वित किया जा सकता है। इन अभिव्यंजक सुविधाओं के बिना भाषाओं में, वे सामान्य रूप से कीवर्ड होते हैं।

भाषाओं द्वारा तुलना

सभी भाषाओं में आरक्षित शब्दों की संख्या समान नहीं है। उदाहरण के लिए, जावा (और अन्य सी (प्रोग्रामिंग भाषा) डेरिवेटिव्स) में आरक्षित शब्दों का एक विरल पूरक है - लगभग 50 - जबकि सामान्य व्यवसाय उन्मुख भाषा में लगभग 400 हैं। स्पेक्ट्रम के दूसरे सिरे पर, शुद्ध प्रोलॉग (प्रोग्रामिंग भाषा) और प्रोग्रामिंग भाषा/आई कोई नहीं है।

नुकसान

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

क्योंकि आरक्षित शब्दों को पहचानकर्ता के रूप में उपयोग नहीं किया जा सकता है, उपयोगकर्ता सोच-विचार करके आरक्षित शब्दों की गलत वर्तनी को पहचानकर्ता के रूप में चयन कर सकते हैं, जैसे कि clazz प्रकार के जावा वेरिएबल के लिए Classहै।[17]


आरक्षित शब्द और भाषा स्वतंत्रता

माइक्रोसॉफ्ट का नेटवर्क समर्थित तकनीक सामान्य भाषा अवसंरचना (नेटवर्क समर्थित तकनीक) विनिर्देश 40+ विभिन्न प्रोग्रामिंग भाषाओं में लिखे गए कोड को अंतिम उत्पाद में संयोजित करने की स्वीकृति देता है। इस वजह से, पहचानकर्ता/आरक्षित शब्द संघट्टन तब हो सकता है जब एक भाषा में क्रियान्वित कोड किसी अन्य भाषा में लिखे गए कोड को निष्पादित करने का प्रयास करता है। उदाहरण के लिए, एक विजुअल प्रारंभकर्ता का सर्व-उद्देश्यीय प्रतीकात्मक निर्देश कोड लाइब्रेरी में क्लास (कंप्यूटर विज्ञान) की परिभाषा हो सकती है जैसे:

' Class Definition of This in Visual Basic.NET:

Public Class this
 ' This class does something...
End Class

यदि यह एक टूलबॉक्स के हिस्से के रूप में संकलित और वितरित किया जाता है, तो एक सी शार्प (प्रोग्रामिंग भाषा) | C # प्रोग्रामर, this"प्रकार के एक वेरिएबल को परिभाषित करने की इच्छा रखते हैं।'' एक समस्या का सामना करना पड़ेगा: 'this' C # में एक आरक्षित शब्द है। इस प्रकार, निम्नलिखित सी # में संकलित नहीं होंगे:

// Using This Class in C#:

this x = new this(); // Won't compile!

सदस्यों तक पहुँचने, आभासी तरीकों को ओवरराइड करने और नामस्थानों की पहचान करने पर एक समान समस्या उत्पन्न होती है।

यह स्ट्रॉपिंग (वाक्यविन्यास) द्वारा संशोधित किया जाता है। इस समस्या के आसपास काम करने के लिए, विनिर्देश प्रोग्रामर को (C # में) पहचानकर्ता से संशोधित AT-संकेत करने की स्वीकृति देता है जो इसे संकलक द्वारा आरक्षित शब्द के अतिरिक्त पहचानकर्ता माना जाता है:

// Using This Class in C#:

@this x = new @this(); // Will compile!

स्थिरता के लिए, गैर-सार्वजनिक व्यवस्थापन जैसे स्थानीय वेरिएबल, पैरामीटर नाम और निजी सदस्यों में भी इस उपयोग की स्वीकृति है।

यह भी देखें

संदर्भ

  1. C99 specification, 7.1.3 Reserved identifiers
  2. C++03 specification, 17.4.3.2.1 Global names [lib.global.names]
  3. Jackson, Mark (Sep 26, 2002). "How do you pronounce "__" (double underscore)?". python-list (Mailing list). Retrieved November 9, 2014.
  4. Hochberg, Tim (Sep 26, 2002). "How do you pronounce "__" (double underscore)?". python-list (Mailing list). Retrieved November 9, 2014.
  5. "DunderAlias - Python Wiki". wiki.python.org.
  6. Notz, Pat (Sep 26, 2002). "How do you pronounce "__" (double underscore)?". python-list (Mailing list). Retrieved November 9, 2014.
  7. "Bug ID: JDK-4211070 Java should support const parameters (like C++) for code maintainence [sic]". Bugs.sun.com. Retrieved 2014-11-04.
  8. "Lexical grammar - JavaScript | MDN". developer.mozilla.org.
  9. C99 specification, 7.1.3 Reserved identifiers: "All identifiers that begin with an underscore and either an uppercase letter or another underscore are always reserved for any use."
  10. C11:The New C Standard, Thomas Plum, "A Note on Keywords"
  11. "The story of None, True and False (and an explanation of literals, keywords and builtins thrown in)", The History of Python, November 10, 2013, Guido van Rossum
  12. "The Java Language Specification, 3rd Edition, Section 3.9: Keywords". Sun Microsystems. 2000. Retrieved 2009-06-17. The following character sequences, formed from ASCII letters, are reserved for use as keywords and cannot be used as identifiers[...]
  13. "ISO/IEC 9899:TC3, Section 6.4.1: Keywords" (PDF). International Organization for Standardization JTC1/SC22/WG14. 2007-09-07. The above tokens (case sensitive) are reserved (in translation phases 7 and 8) for use as keywords, and shall not be used otherwise.
  14. Peter Norvig: Paradigms of Artificial Intelligence Programming: Case Studies in Common Lisp, Morgan Kaufmann, 1991, ISBN 1-55860-191-0, Web
  15. Type KEYWORD from the Common Lisp HyperSpec
  16. "CLHS: Section 11.1.2.1.2". www.lispworks.com.
  17. Zammetti, Frank (2007). Practical JavaScript, DOM Scripting and Ajax Projects. Apress. ISBN 9781430201977.