आरक्षित शब्द: Difference between revisions

From Vigyanwiki
(Created page with "{{Cleanup reorganize|date=November 2022|reason=A lot of overlap in (e.g.) the "Distinction", "Definition" and "Syntax" sections}}{{short description|Word in a programming lang...")
 
No edit summary
Line 1: Line 1:
{{Cleanup reorganize|date=November 2022|reason=A lot of overlap in (e.g.) the "Distinction", "Definition" and "Syntax" sections}}{{short description|Word in a programming language that cannot be used as an identifier}}
{{short description|Word in a programming language that cannot be used as an identifier}}
एक [[कंप्यूटर भाषा]] में, एक आरक्षित शब्द (जिसे एक आरक्षित पहचानकर्ता के रूप में भी जाना जाता है) एक ऐसा शब्द है जिसे पहचानकर्ता (कंप्यूटर भाषा) के रूप में उपयोग नहीं किया जा सकता है, जैसे चर, फ़ंक्शन या [[लेबल (प्रोग्रामिंग भाषा)]] का नाम - यह है उपयोग से आरक्षित। यह एक [[सिंटेक्स (प्रोग्रामिंग भाषाएं)]] परिभाषा है, और एक आरक्षित शब्द का कोई उपयोगकर्ता परिभाषित अर्थ नहीं हो सकता है।
एक [[कंप्यूटर भाषा]] में, एक आरक्षित शब्द (जिसे एक आरक्षित पहचानकर्ता के रूप में भी जाना जाता है) एक ऐसा शब्द है जिसे पहचानकर्ता (कंप्यूटर भाषा) के रूप में उपयोग नहीं किया जा सकता है, जैसे वेरिएबल, फ़ंक्शन या [[लेबल (प्रोग्रामिंग भाषा)]] का नाम - यह है उपयोग से आरक्षित। यह एक [[सिंटेक्स (प्रोग्रामिंग भाषाएं)]] परिभाषा है, और एक आरक्षित शब्द का कोई उपयोगकर्ता परिभाषित अर्थ नहीं हो सकता है।


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


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


== भेद ==
== भेद ==
{{Unreferenced section|date=November 2022}}
एक भाषा में आरक्षित शब्दों और खोजशब्दों के समूह प्रायः मेल खाते हैं या लगभग बराबर होते हैं, और भेद सूक्ष्म होता है, इसलिए शब्दों को प्रायः एक दूसरे के स्थान पर उपयोग किया जाता है। हालांकि, सावधानीपूर्वक उपयोग में वे प्रतिष्ठित हैं।
एक भाषा में आरक्षित शब्दों और खोजशब्दों के समूह अक्सर मेल खाते हैं या लगभग बराबर होते हैं, और भेद सूक्ष्म होता है, इसलिए शब्दों को अक्सर एक दूसरे के स्थान पर उपयोग किया जाता है। हालांकि, सावधानीपूर्वक उपयोग में वे प्रतिष्ठित हैं।


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


इसके विपरीत, खोजशब्दों को आरक्षित शब्द नहीं होना चाहिए, उनकी भूमिका संदर्भ से समझी जाती है, या उन्हें दूसरे तरीके से अलग किया जा सकता है, जैसे कि [[स्ट्रैपिंग (प्रोग्रामिंग)]]। उदाहरण के लिए, मुहावरा <code>if = 1</code> अधिकांश व्याकरणों में असंदिग्ध है, क्योंकि if क्लॉज का कंट्रोल स्टेटमेंट a से शुरू नहीं हो सकता है <code>=</code>, और इस प्रकार फोरट्रान जैसी कुछ भाषाओं में इसकी अनुमति है। वैकल्पिक रूप से, [[ALGOL 68]] में, खोजशब्दों को बोल्ड में सूचीबद्ध करके कठोर भाषा में - किसी तरह से अलग करने के लिए चिह्नित किया जाना चाहिए, और इस प्रकार आरक्षित शब्द नहीं हैं। इस प्रकार सख्त भाषा में निम्नलिखित अभिव्यक्ति कानूनी है, बोल्ड कीवर्ड के रूप में सामान्य पहचानकर्ता के साथ संघर्ष नहीं करता है <code>if</code>:
इसके विपरीत, खोजशब्दों को आरक्षित शब्द नहीं होना चाहिए, उनकी भूमिका संदर्भ से समझी जाती है, या उन्हें दूसरे तरीके से अलग किया जा सकता है, जैसे कि [[स्ट्रैपिंग (प्रोग्रामिंग)]]। उदाहरण के लिए, मुहावरा <code>if = 1</code> अधिकांश व्याकरणों में असंदिग्ध है, क्योंकि if क्लॉज का कंट्रोल स्टेटमेंट a से शुरू नहीं हो सकता है <code>=</code>, और इस प्रकार फोरट्रान जैसी कुछ भाषाओं में इसकी स्वीकृति है। वैकल्पिक रूप से, [[ALGOL 68|एल्गोरिथम भाषा 68]] में, खोजशब्दों को बोल्ड में सूचीबद्ध करके कठोर भाषा में - किसी तरह से अलग करने के लिए चिह्नित किया जाना चाहिए, और इस प्रकार आरक्षित शब्द नहीं हैं। इस प्रकार सख्त भाषा में निम्नलिखित व्यंजक कानूनी है, बोल्ड कीवर्ड के रूप में सामान्य पहचानकर्ता के साथ संघर्ष नहीं करता है <code>if</code>:
: यदि eq 0 तो 1 fi
: यदि eq 0 तो 1 fi
हालाँकि, ALGOL 68 में एक स्ट्रॉपिंग शासन भी है जिसमें कीवर्ड आरक्षित शब्द हैं, इसका एक उदाहरण है कि ये विशिष्ट अवधारणाएँ अक्सर कैसे मेल खाती हैं; इसका पालन कई आधुनिक भाषाओं में किया जाता है।
हालाँकि, एल्गोरिथम भाषा 68 में एक स्ट्रॉपिंग शासन भी है जिसमें कीवर्ड आरक्षित शब्द हैं, इसका एक उदाहरण है कि ये विशिष्ट अवधारणाएँ प्रायः कैसे मेल खाती हैं; इसका पालन कई आधुनिक भाषाओं में किया जाता है।


== सिंटेक्स ==
== सिंटेक्स ==
{{main|Syntax (programming languages)}} एक आरक्षित शब्द वह है जो एक सामान्य शब्द की तरह दिखता है, लेकिन एक सामान्य शब्द के रूप में प्रयोग करने की अनुमति नहीं है। औपचारिक रूप से इसका मतलब यह है कि यह पहचानकर्ताओं के सामान्य शाब्दिक वाक्य-विन्यास (शब्दों का वाक्य-विन्यास) को संतुष्ट करता है - उदाहरण के लिए, अक्षरों का एक क्रम होना - लेकिन इसका उपयोग नहीं किया जा सकता है जहाँ पहचानकर्ताओं का उपयोग किया जाता है। उदाहरण के लिए शब्द <code>if</code> आमतौर पर एक आरक्षित शब्द है, जबकि <code>x</code> आम तौर पर ऐसा नहीं है <code>x = 1</code> एक वैध असाइनमेंट है, लेकिन <code>if = 1</code> क्या नहीं है।
{{main|Syntax (programming languages)}} एक आरक्षित शब्द वह है जो एक सामान्य शब्द की तरह दिखता है, लेकिन एक सामान्य शब्द के रूप में प्रयोग करने की स्वीकृति नहीं है। औपचारिक रूप से इसका मतलब यह है कि यह पहचानकर्ताओं के सामान्य शाब्दिक वाक्य-विन्यास (शब्दों का वाक्य-विन्यास) को संतुष्ट करता है - उदाहरण के लिए, अक्षरों का एक क्रम होना - लेकिन इसका उपयोग नहीं किया जा सकता है जहाँ पहचानकर्ताओं का उपयोग किया जाता है। उदाहरण के लिए शब्द <code>if</code> सामान्य रूप से एक आरक्षित शब्द है, जबकि <code>x</code> सामान्य रूप से ऐसा नहीं है <code>x = 1</code> एक वैध असाइनमेंट है, लेकिन <code>if = 1</code> क्या नहीं है।


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


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


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


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


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


यह अक्सर एक उपसर्ग, अक्सर एक या अधिक [[बल देना]] का उपयोग करके किया जाता है। C और C++ इस संबंध में उल्लेखनीय हैं: C99 आरक्षित पहचानकर्ता जो दो अंडरस्कोर या एक अंडरस्कोर के साथ शुरू होता है, जिसके बाद एक अपरकेस अक्षर होता है, और आगे ऐसे पहचानकर्ता आरक्षित होते हैं जो फ़ाइल दायरे में उपयोग के लिए एकल अंडरस्कोर (साधारण और टैग रिक्त स्थान में) से शुरू होते हैं;<ref>C99 specification, 7.1.3 Reserved identifiers</ref> सी ++ 03 के साथ उन पहचानकर्ताओं को सुरक्षित रखता है जिनमें कहीं भी डबल अंडरस्कोर होता है<ref>C++03 specification, 17.4.3.2.1 Global names [lib.global.names]</ref> - यह एक विभाजक (उपयोगकर्ता पहचानकर्ताओं को जोड़ने के लिए) के रूप में एक डबल अंडरस्कोर के उपयोग की अनुमति देता है, उदाहरण के लिए।
यह प्रायः एक उपसर्ग, प्रायः एक या अधिक [[बल देना]] का उपयोग करके किया जाता है। C और C++ इस संबंध में उल्लेखनीय हैं: C99 आरक्षित पहचानकर्ता जो दो अंडरस्कोर या एक अंडरस्कोर के साथ शुरू होता है, जिसके बाद एक अपरकेस अक्षर होता है, और आगे ऐसे पहचानकर्ता आरक्षित होते हैं जो फ़ाइल दायरे में उपयोग के लिए एकल अंडरस्कोर (साधारण और टैग रिक्त स्थान में) से शुरू होते हैं;<ref>C99 specification, 7.1.3 Reserved identifiers</ref> सी ++ 03 के साथ उन पहचानकर्ताओं को सुरक्षित रखता है जिनमें कहीं भी डबल अंडरस्कोर होता है<ref>C++03 specification, 17.4.3.2.1 Global names [lib.global.names]</ref> - यह एक विभाजक (उपयोगकर्ता पहचानकर्ताओं को जोड़ने के लिए) के रूप में एक डबल अंडरस्कोर के उपयोग की स्वीकृति देता है, उदाहरण के लिए।


पायथन में आंतरिक पहचानकर्ताओं में दोहरे अंडरस्कोर के लगातार उपयोग ने संक्षिप्त नाम डंडर को जन्म दिया; यह मार्क जैक्सन द्वारा गढ़ा गया था<ref>{{cite mailing list |title=How do you pronounce "__" (double underscore)? |first=Mark |last=Jackson |date=Sep 26, 2002 |mailing-list=python-list |url=https://mail.python.org/pipermail/python-list/2002-September/155836.html |access-date=November 9, 2014}}</ref> और स्वतंत्र रूप से टिम होचबर्ग द्वारा,<ref>{{cite mailing list |title=How do you pronounce "__" (double underscore)? |first=Tim |last=Hochberg |date=Sep 26, 2002 |mailing-list=python-list |url=https://mail.python.org/pipermail/python-list/2002-September/157561.html |access-date=November 9, 2014}}</ref> 2002 में एक ही प्रश्न के उत्तर में दोनों एक दूसरे के मिनटों के भीतर।<ref>{{Cite web|url=https://wiki.python.org/moin/DunderAlias|title=DunderAlias - Python Wiki|website=wiki.python.org}}</ref><ref>{{cite mailing list |title=How do you pronounce "__" (double underscore)? |first=Pat |last=Notz |date=Sep 26, 2002 |mailing-list=python-list |url=https://mail.python.org/pipermail/python-list/2002-September/137816.html |access-date=November 9, 2014}}</ref>
पायथन में आंतरिक पहचानकर्ताओं में दोहरे अंडरस्कोर के लगातार उपयोग ने संक्षिप्त नाम डंडर को जन्म दिया; यह मार्क जैक्सन द्वारा गढ़ा गया था<ref>{{cite mailing list |title=How do you pronounce "__" (double underscore)? |first=Mark |last=Jackson |date=Sep 26, 2002 |mailing-list=python-list |url=https://mail.python.org/pipermail/python-list/2002-September/155836.html |access-date=November 9, 2014}}</ref> और स्वतंत्र रूप से टिम होचबर्ग द्वारा,<ref>{{cite mailing list |title=How do you pronounce "__" (double underscore)? |first=Tim |last=Hochberg |date=Sep 26, 2002 |mailing-list=python-list |url=https://mail.python.org/pipermail/python-list/2002-September/157561.html |access-date=November 9, 2014}}</ref> 2002 में एक ही प्रश्न के उत्तर में दोनों एक दूसरे के मिनटों के भीतर।<ref>{{Cite web|url=https://wiki.python.org/moin/DunderAlias|title=DunderAlias - Python Wiki|website=wiki.python.org}}</ref><ref>{{cite mailing list |title=How do you pronounce "__" (double underscore)? |first=Pat |last=Notz |date=Sep 26, 2002 |mailing-list=python-list |url=https://mail.python.org/pipermail/python-list/2002-September/137816.html |access-date=November 9, 2014}}</ref>
Line 36: Line 35:


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


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


एक उल्लेखनीय उदाहरण [[जावा (प्रोग्रामिंग भाषा)]] में है, जहां <code>const</code> और <code>goto</code> आरक्षित शब्द हैं - उनका जावा में कोई अर्थ नहीं है लेकिन उन्हें पहचानकर्ता के रूप में भी इस्तेमाल नहीं किया जा सकता है। शर्तों को आरक्षित करके, पुराने जावा स्रोत कोड को तोड़े बिना, यदि वांछित हो, तो उन्हें जावा के भविष्य के संस्करणों में लागू किया जा सकता है। उदाहरण के लिए, 1999 में C++- जैसे जोड़ने का प्रस्ताव था <code>const</code> भाषा के लिए, जिसका उपयोग करना संभव था <code>const</code> शब्द, चूंकि यह आरक्षित था लेकिन वर्तमान में अप्रयुक्त है; हालाँकि, इस प्रस्ताव को अस्वीकार कर दिया गया था - विशेष रूप से क्योंकि भले ही फीचर को जोड़ने से कोई मौजूदा प्रोग्राम नहीं टूटेगा, इसे मानक लाइब्रेरी (विशेष रूप से संग्रह में) का उपयोग करने से संगतता टूट जाएगी।<ref>{{cite web|url=http://bugs.java.com/view_bug.do?bug_id=4211070 |title=Bug ID: JDK-4211070 Java should support const parameters (like C++) for code {{sic|maint|ainence|nolink=y}} |publisher=Bugs.sun.com |access-date=2014-11-04}}<!-- was previously at:
एक उल्लेखनीय उदाहरण [[जावा (प्रोग्रामिंग भाषा)]] में है, जहां <code>const</code> और <code>goto</code> आरक्षित शब्द हैं - उनका जावा में कोई अर्थ नहीं है लेकिन उन्हें पहचानकर्ता के रूप में भी उपयोग नहीं किया जा सकता है। शर्तों को आरक्षित करके, पुराने जावा स्रोत कोड को तोड़े बिना, यदि वांछित हो, तो उन्हें जावा के भविष्य के संस्करणों में लागू किया जा सकता है। उदाहरण के लिए, 1999 में C++- जैसे जोड़ने का प्रस्ताव था <code>const</code> भाषा के लिए, जिसका उपयोग करना संभव था <code>const</code> शब्द, चूंकि यह आरक्षित था लेकिन वर्तमान में अप्रयुक्त है; हालाँकि, इस प्रस्ताव को अस्वीकार कर दिया गया था - विशेष रूप से क्योंकि तथापि फीवेरिएबल को जोड़ने से कोई सम्मिलित प्रोग्राम नहीं टूटेगा, इसे मानक लाइब्रेरी (विशेष रूप से संग्रह में) का उपयोग करने से संगतता टूट जाएगी।<ref>{{cite web|url=http://bugs.java.com/view_bug.do?bug_id=4211070 |title=Bug ID: JDK-4211070 Java should support const parameters (like C++) for code {{sic|maint|ainence|nolink=y}} |publisher=Bugs.sun.com |access-date=2014-11-04}}<!-- was previously at:
http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=4211070
http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=4211070
2013-08-18
2013-08-18
--></ref> [[जावास्क्रिप्ट]] में विशेष कार्यक्षमता के बिना कई आरक्षित शब्द भी होते हैं; सटीक सूची संस्करण और मोड से भिन्न होती है।<ref>{{Cite web|url=https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Lexical_grammar|title=Lexical grammar - JavaScript &#124; MDN|website=developer.mozilla.org}}</ref>
--></ref> [[जावास्क्रिप्ट]] में विशेष फंक्शनक्षमता के बिना कई आरक्षित शब्द भी होते हैं; परिशुद्ध सूची संस्करण और मोड से भिन्न होती है।<ref>{{Cite web|url=https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Lexical_grammar|title=Lexical grammar - JavaScript &#124; MDN|website=developer.mozilla.org}}</ref>
भाषाएँ इस बात में महत्वपूर्ण रूप से भिन्न होती हैं कि वे कितनी बार नए आरक्षित शब्दों या खोजशब्दों का परिचय देती हैं और वे उन्हें कैसे नाम देती हैं, कुछ भाषाएँ बहुत रूढ़िवादी हैं और नए खोजशब्दों को शायद ही कभी पेश करती हैं या कभी नहीं, मौजूदा कार्यक्रमों को तोड़ने से बचने के लिए, जबकि अन्य भाषाएँ नए खोजशब्दों को अधिक स्वतंत्र रूप से पेश करती हैं, मौजूदा की आवश्यकता होती है विरोध करने वाले मौजूदा पहचानकर्ताओं को बदलने के लिए कार्यक्रम। [[C++11]] की तुलना में C11 (C मानक संशोधन) में नए कीवर्ड द्वारा एक केस स्टडी दी गई है, दोनों 2011 से - याद रखें कि C और C++ में, पहचानकर्ता जो एक अंडरस्कोर के साथ शुरू होते हैं, उसके बाद अपरकेस अक्षर आरक्षित होते हैं:<ref>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."</ref>
भाषाएँ इस बात में महत्वपूर्ण रूप से भिन्न होती हैं कि वे कितनी बार नए आरक्षित शब्दों या खोजशब्दों का परिचय देती हैं और वे उन्हें कैसे नाम देती हैं, कुछ भाषाएँ बहुत रूढ़िवादी हैं और नए खोजशब्दों को संभवयतः ही कभी प्रस्तुत करती हैं या कभी नहीं, सम्मिलित प्रोग्रामों को तोड़ने से बचने के लिए, जबकि अन्य भाषाएँ नए खोजशब्दों को अधिक स्वतंत्र रूप से प्रस्तुत करती हैं, सम्मिलित की आवश्यकता होती है विरोध करने वाले सम्मिलित पहचानकर्ताओं को बदलने के लिए प्रोग्राम। [[C++11]] की तुलना में C11 (C मानक संशोधन) में नए कीवर्ड द्वारा एक केस स्टडी दी गई है, दोनों 2011 से - याद रखें कि C और C++ में, पहचानकर्ता जो एक अंडरस्कोर के साथ शुरू होते हैं, उसके बाद अपरकेस अक्षर आरक्षित होते हैं:<ref>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."</ref>
{{quote|The C committee prefers not to create new keywords in the user name space, as it is generally expected that each revision of C will avoid breaking older C programs. By comparison, the C++ committee (WG21) prefers to make new keywords as normal‐looking as the old keywords. For example, C++11 defines a new <code>thread_local</code> keyword to designate static storage local to one thread. C11 defines the new keyword as <code>_Thread_local.</code> In the new C11 header &lt;threads.h&gt;, there is a macro definition to provide the normal‐looking name:<ref>[http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2013/n3631.pdf C11:The New C Standard], Thomas Plum, "A Note on Keywords"</ref>
{{quote|C कमेटी यूजर नेम स्पेस में नए कीवर्ड्स नहीं बनाना चयन करती है, क्योंकि सामान्य रूप से यह उपेक्षा की जाती है कि C का प्रत्येक संशोधन पुराने C प्रोग्रामों को खोजने से बच जाएगा। तुलनात्मक रूप से, C++ समिति (WG21) नए खोजशब्दों को पुराने खोजशब्दों की तरह सामान्य-दिखने के लिए प्राथमिकता देती है। उदाहरण के लिए, सी ++ 11 एक थ्रेड के लिए स्थिर भंडारण स्थानीय को नामित करने के लिए एक नया <code>thread_local</code> कीवर्ड परिभाषित करता है। C11 नए कीवर्ड को <code>_Thread_local.</code> के रूप में परिभाषित करता है। नए C11 हैडर &lt;threads.h&gt;, सामान्य-दिखने वाले नाम प्रदान करने के लिए एक मैक्रो परिभाषा है:<ref>[http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2013/n3631.pdf C11:The New C Standard], Thomas Plum, "A Note on Keywords"</ref>
:<code>#define thread_local _Thread_local</code>
:<code>#define thread_local _Thread_local</code>
}}
}}
यानी C11 ने कीवर्ड पेश किया <code>_Thread_local</code> आरक्षित शब्दों के एक मौजूदा सेट के भीतर (एक निश्चित उपसर्ग वाले), और फिर इसके उपयोग की अनुमति देने के लिए एक अलग सुविधा (मैक्रो प्रोसेसिंग) का उपयोग किया जैसे कि यह बिना किसी उपसर्ग के एक नया कीवर्ड था, जबकि C++11 कीवर्ड का परिचय देता है <code>thread_local</code> इसके बावजूद यह एक मौजूदा आरक्षित शब्द नहीं है, इसका उपयोग करने वाले किसी भी प्रोग्राम को तोड़ना, लेकिन मैक्रो प्रोसेसिंग की आवश्यकता के बिना।
 
यानी C11 ने कीवर्ड प्रस्तुत किया <code>_Thread_local</code> आरक्षित शब्दों के एक सम्मिलित सेट के भीतर (एक निश्चित उपसर्ग वाले), और फिर इसके उपयोग की स्वीकृति देने के लिए एक अलग सुविधा (मैक्रो प्रोसेसिंग) का उपयोग किया जैसे कि यह बिना किसी उपसर्ग के एक नया कीवर्ड था, जबकि C++11 कीवर्ड का परिचय देता है <code>thread_local</code> इसके होने पर भी यह एक सम्मिलित आरक्षित शब्द नहीं है, इसका उपयोग करने वाले किसी भी प्रोग्राम को तोड़ना, लेकिन मैक्रो प्रोसेसिंग की आवश्यकता के बिना।


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


कीवर्ड के रूप में क्या प्रदान किया जाता है और पूर्वनिर्धारित क्या है, इस आधार पर भाषाएँ भिन्न होती हैं। कुछ भाषाएं, उदाहरण के लिए, इनपुट/आउटपुट संचालन के लिए कीवर्ड प्रदान करती हैं जबकि अन्य में ये लाइब्रेरी रूटीन हैं। [[पायथन (प्रोग्रामिंग भाषा)]] (3.0 से पहले के संस्करण) और कई [[बुनियादी]] बोलियों में, <code>print</code> एक कीवर्ड है। इसके विपरीत, सी, लिस्प और पायथन 3.0 समकक्ष <code>printf</code>, <code>format</code>, और <code>print</code> मानक पुस्तकालय में कार्य हैं। इसी तरह, पायथन में 3.0 से पहले, <code>None</code>, <code>True</code>, और <code>False</code> पूर्वनिर्धारित चर थे, लेकिन आरक्षित शब्द नहीं थे, लेकिन पायथन 3.0 में उन्हें आरक्षित शब्द बना दिया गया था।<ref name=guido2013>"[http://python-history.blogspot.com/2013/11/story-of-none-true-false.html 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</ref>
कीवर्ड के रूप में क्या प्रदान किया जाता है और पूर्वनिर्धारित क्या है, इस आधार पर भाषाएँ भिन्न होती हैं। कुछ भाषाएं, उदाहरण के लिए, इनपुट/आउटपुट संचालन के लिए कीवर्ड प्रदान करती हैं जबकि अन्य में ये लाइब्रेरी रूटीन हैं। [[पायथन (प्रोग्रामिंग भाषा)]] (3.0 से पहले के संस्करण) और कई [[बुनियादी]] बोलियों में, <code>print</code> एक कीवर्ड है। इसके विपरीत, सी, लिस्प और पायथन 3.0 समकक्ष <code>printf</code>, <code>format</code>, और <code>print</code> मानक लाइब्रेरी में फंक्शन हैं। इसी तरह, पायथन में 3.0 से पहले, <code>None</code>, <code>True</code>, और <code>False</code> पूर्वनिर्धारित वेरिएबल थे, लेकिन आरक्षित शब्द नहीं थे, लेकिन पायथन 3.0 में उन्हें आरक्षित शब्द बना दिया गया था।<ref name=guido2013>"[http://python-history.blogspot.com/2013/11/story-of-none-true-false.html 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</ref>




== परिभाषा ==
== परिभाषा ==
{{Multiple issues|section=yes|
कुछ शब्द कीवर्ड और आरक्षित शब्द का परस्पर उपयोग करते हैं, जबकि अन्य उपयोग में अंतर करते हैं, कीवर्ड का उपयोग करके एक शब्द का अर्थ है जो केवल कुछ संदर्भों में विशेष है, लेकिन आरक्षित शब्द का अर्थ एक विशेष शब्द है जिसे उपयोगकर्ता-परिभाषित नाम के रूप में उपयोग नहीं किया जा सकता है। खोजशब्दों का अर्थ - और, वास्तव में, खोजशब्द की धारणा का अर्थ - भाषा से भाषा में व्यापक रूप से भिन्न होता है। विशेष रूप से, एल्गोरिथम भाषा 68 में, कीवर्ड्स को स्ट्रॉप किया गया है (सख्त भाषा में, बोल्ड में लिखा गया है) और आरक्षित शब्द नहीं हैं - अनस्ट्रोप्ड शब्द को सामान्य पहचानकर्ता के रूप में उपयोग किया जा सकता है।
{{More citations needed section|date=December 2009}}
{{cleanup section|reason=mix of definition, examples, and general discussion|date=March 2014}}
}}
कुछ शब्द कीवर्ड और आरक्षित शब्द का परस्पर उपयोग करते हैं, जबकि अन्य उपयोग में अंतर करते हैं, कीवर्ड का उपयोग करके एक शब्द का अर्थ है जो केवल कुछ संदर्भों में विशेष है, लेकिन आरक्षित शब्द का अर्थ एक विशेष शब्द है जिसे उपयोगकर्ता-परिभाषित नाम के रूप में उपयोग नहीं किया जा सकता है। खोजशब्दों का अर्थ - और, वास्तव में, खोजशब्द की धारणा का अर्थ - भाषा से भाषा में व्यापक रूप से भिन्न होता है। विशेष रूप से, ALGOL 68 में, कीवर्ड्स को स्ट्रॉप किया गया है (सख्त भाषा में, बोल्ड में लिखा गया है) और आरक्षित शब्द नहीं हैं - अनस्ट्रोप्ड शब्द को सामान्य पहचानकर्ता के रूप में उपयोग किया जा सकता है।


जावा (प्रोग्रामिंग भाषा) विशिष्टता कीवर्ड शब्द का उपयोग करती है।<ref>
जावा (प्रोग्रामिंग भाषा) विशिष्टता कीवर्ड शब्द का उपयोग करती है।<ref>
Line 82: Line 78:
कई भाषाओं में, जैसे [[सी (प्रोग्रामिंग भाषा)]] और समान वातावरण जैसे [[सी ++]], एक कीवर्ड एक आरक्षित शब्द है जो एक वाक्य रचनात्मक रूप की पहचान करता है। नियंत्रण प्रवाह निर्माण में प्रयुक्त शब्द, जैसे <code>if</code>, <code>then</code>, और <code>else</code> कीवर्ड हैं। इन भाषाओं में, कीवर्ड का उपयोग वेरिएबल्स या फ़ंक्शंस के नाम के रूप में भी नहीं किया जा सकता है।
कई भाषाओं में, जैसे [[सी (प्रोग्रामिंग भाषा)]] और समान वातावरण जैसे [[सी ++]], एक कीवर्ड एक आरक्षित शब्द है जो एक वाक्य रचनात्मक रूप की पहचान करता है। नियंत्रण प्रवाह निर्माण में प्रयुक्त शब्द, जैसे <code>if</code>, <code>then</code>, और <code>else</code> कीवर्ड हैं। इन भाषाओं में, कीवर्ड का उपयोग वेरिएबल्स या फ़ंक्शंस के नाम के रूप में भी नहीं किया जा सकता है।


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


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


[[सामान्य लिस्प]] में, कीवर्ड (या कीवर्ड सिंबल) शब्द का प्रयोग एक विशेष प्रकार के सिंबल (लिस्प) या पहचानकर्ता के लिए किया जाता है। अन्य प्रतीकों के विपरीत, जो आमतौर पर चर या कार्यों के लिए खड़े होते हैं, कीवर्ड स्व-लिस्प (प्रोग्रामिंग भाषा) # आत्म-मूल्यांकन रूपों और उद्धरण और आत्म-मूल्यांकन हैं<ref>[[Peter Norvig]]: ''Paradigms of Artificial Intelligence Programming: Case Studies in Common Lisp'', Morgan Kaufmann, 1991, {{ISBN|1-55860-191-0}}, [http://norvig.com/paip.html Web]</ref><sup>:98</sup> और स्ट्रिंग में इंटर्नशिप कर रहे हैं <code>KEYWORD</code> पैकेट।<ref>[http://www.lispworks.com/documentation/HyperSpec/Body/t_kwd.htm#keyword ''Type'' '''KEYWORD'''] from the [[Common Lisp HyperSpec]]</ref> कीवर्ड आमतौर पर कार्यों के लिए नामित तर्कों को लेबल करने और प्रतीकात्मक मूल्यों का प्रतिनिधित्व करने के लिए उपयोग किए जाते हैं। COMMON-LISP नामक पैकेज में फ़ंक्शंस, वेरिएबल्स, विशेष रूपों और मैक्रोज़ के नाम वाले प्रतीक मूल रूप से आरक्षित शब्द हैं। एएनएसआई कॉमन लिस्प में उन्हें फिर से परिभाषित करने का प्रभाव अपरिभाषित है।<ref>{{Cite web|url=http://www.lispworks.com/documentation/HyperSpec/Body/11_abab.htm|title=CLHS: Section 11.1.2.1.2|website=www.lispworks.com}}</ref> उनका बंधन संभव है। उदाहरण के लिए अभिव्यक्ति <code>(if if case or)</code> संभव है, कब <code>if</code> एक स्थानीय चर है। सबसे वामपंथी <code>if</code> यह आपकी जानकारी के लिए है <code>if</code> ऑपरेटर; शेष प्रतीकों की व्याख्या चर नामों के रूप में की जाती है। चूंकि कार्यों और चर के लिए एक अलग नामस्थान है, <code>if</code> एक स्थानीय चर हो सकता है। सामान्य लिस्प में, हालांकि, दो विशेष प्रतीक हैं जो कीवर्ड पैकेज में नहीं हैं: प्रतीक <code>t</code> और <code>nil</code>. जब अभिव्यक्तियों के रूप में मूल्यांकन किया जाता है, तो वे स्वयं का मूल्यांकन करते हैं। उन्हें कार्यों या चर के नाम के रूप में उपयोग नहीं किया जा सकता है, इसलिए वास्तविक रूप से आरक्षित हैं। <code>(let ((t 42)))</code> एक अच्छी तरह से बनाई गई अभिव्यक्ति है, लेकिन <code>let</code> ऑपरेटर उपयोग की अनुमति नहीं देगा।
[[सामान्य लिस्प]] में, कीवर्ड (या कीवर्ड सिंबल) शब्द का प्रयोग एक विशेष प्रकार के सिंबल (लिस्प) या पहचानकर्ता के लिए किया जाता है। अन्य प्रतीकों के विपरीत, जो सामान्य रूप से वेरिएबल या फंक्शनों के लिए खड़े होते हैं, कीवर्ड स्व-लिस्प (प्रोग्रामिंग भाषा) # आत्म-मूल्यांकन रूपों और उद्धरण और आत्म-मूल्यांकन हैं<ref>[[Peter Norvig]]: ''Paradigms of Artificial Intelligence Programming: Case Studies in Common Lisp'', Morgan Kaufmann, 1991, {{ISBN|1-55860-191-0}}, [http://norvig.com/paip.html Web]</ref><sup>:98</sup> और स्ट्रिंग में इंटर्नशिप कर रहे हैं <code>KEYWORD</code> पैकेट।<ref>[http://www.lispworks.com/documentation/HyperSpec/Body/t_kwd.htm#keyword ''Type'' '''KEYWORD'''] from the [[Common Lisp HyperSpec]]</ref> कीवर्ड सामान्य रूप से फंक्शनों के लिए नामित तर्कों को लेबल करने और प्रतीकात्मक मूल्यों का प्रतिनिधित्व करने के लिए उपयोग किए जाते हैं। COMMON-LISP नामक पैकेज में फ़ंक्शंस, वेरिएबल्स, विशेष रूपों और मैक्रोज़ के नाम वाले प्रतीक मूल रूप से आरक्षित शब्द हैं। एएनएसआई कॉमन लिस्प में उन्हें फिर से परिभाषित करने का प्रभाव अपरिभाषित है।<ref>{{Cite web|url=http://www.lispworks.com/documentation/HyperSpec/Body/11_abab.htm|title=CLHS: Section 11.1.2.1.2|website=www.lispworks.com}}</ref> उनका बंधन संभव है। उदाहरण के लिए व्यंजक <code>(if if case or)</code> संभव है, कब <code>if</code> एक स्थानीय वेरिएबल है। सबसे वामपंथी <code>if</code> यह आपकी जानकारी के लिए है <code>if</code> ऑपरेटर; शेष प्रतीकों की व्याख्या वेरिएबल नामों के रूप में की जाती है। चूंकि फंक्शनों और वेरिएबल के लिए एक अलग नामस्थान है, <code>if</code> एक स्थानीय वेरिएबल हो सकता है। सामान्य लिस्प में, हालांकि, दो विशेष प्रतीक हैं जो कीवर्ड पैकेज में नहीं हैं: प्रतीक <code>t</code> और <code>nil</code>. जब व्यंजकयों के रूप में मूल्यांकन किया जाता है, तो वे स्वयं का मूल्यांकन करते हैं। उन्हें फंक्शनों या वेरिएबल के नाम के रूप में उपयोग नहीं किया जा सकता है, इसलिए वास्तविक रूप से आरक्षित हैं। <code>(let ((t 42)))</code> एक अच्छी तरह से बनाई गई व्यंजक है, लेकिन <code>let</code> ऑपरेटर उपयोग की स्वीकृति नहीं देगा।


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


[[मैक्रो (कंप्यूटर विज्ञान)]] या [[आलसी मूल्यांकन]] वाली भाषाओं में, नियंत्रण प्रवाह निर्माण जैसे <code>if</code> मैक्रोज़ या फ़ंक्शंस के रूप में कार्यान्वित किया जा सकता है। इन अभिव्यंजक सुविधाओं के बिना भाषाओं में, वे आम तौर पर खोजशब्द होते हैं।
[[मैक्रो (कंप्यूटर विज्ञान)]] या [[आलसी मूल्यांकन]] वाली भाषाओं में, नियंत्रण प्रवाह निर्माण जैसे <code>if</code> मैक्रोज़ या फ़ंक्शंस के रूप में फंक्शनान्वित किया जा सकता है। इन अभिव्यंजक सुविधाओं के बिना भाषाओं में, वे सामान्य रूप से खोजशब्द होते हैं।


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


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


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


क्योंकि आरक्षित शब्दों को पहचानकर्ता के रूप में उपयोग नहीं किया जा सकता है, उपयोगकर्ता जानबूझकर आरक्षित शब्दों की गलत वर्तनी को पहचानकर्ता के रूप में चुन सकते हैं, जैसे कि {{code|clazz}} प्रकार के जावा चर के लिए {{code|Class}}.<ref>{{cite book|url=https://books.google.com/books?id=oo26Kw9c2W4C&pg=PA280|first=Frank|last=Zammetti|title=Practical JavaScript, DOM Scripting and Ajax Projects|publisher=[[Apress]]|year=2007|isbn=9781430201977}}</ref>
क्योंकि आरक्षित शब्दों को पहचानकर्ता के रूप में उपयोग नहीं किया जा सकता है, उपयोगकर्ता जानबूझकर आरक्षित शब्दों की गलत वर्तनी को पहचानकर्ता के रूप में चुन सकते हैं, जैसे कि {{code|clazz}} प्रकार के जावा वेरिएबल के लिए {{code|Class}}.<ref>{{cite book|url=https://books.google.com/books?id=oo26Kw9c2W4C&pg=PA280|first=Frank|last=Zammetti|title=Practical JavaScript, DOM Scripting and Ajax Projects|publisher=[[Apress]]|year=2007|isbn=9781430201977}}</ref>




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


माइक्रोसॉफ्ट का .NET फ्रेमवर्क|.नेट [[सामान्य भाषा अवसंरचना]]| कॉमन लैंग्वेज इन्फ्रास्ट्रक्चर (CLI) विनिर्देश 40+ विभिन्न प्रोग्रामिंग भाषाओं में लिखे गए कोड को अंतिम उत्पाद में संयोजित करने की अनुमति देता है। इस वजह से, पहचानकर्ता/आरक्षित शब्द टकराव तब हो सकता है जब एक भाषा में कार्यान्वित कोड किसी अन्य भाषा में लिखे गए कोड को निष्पादित करने का प्रयास करता है। उदाहरण के लिए, एक Visual Basic .NET|Visual Basic.NET लाइब्रेरी में क्लास (कंप्यूटर विज्ञान) की परिभाषा हो सकती है जैसे:
माइक्रोसॉफ्ट का .NET फ्रेमवर्क|.नेट [[सामान्य भाषा अवसंरचना]]| कॉमन लैंग्वेज इन्फ्रास्ट्रक्वेरिएबल (CLI) विनिर्देश 40+ विभिन्न प्रोग्रामिंग भाषाओं में लिखे गए कोड को अंतिम उत्पाद में संयोजित करने की स्वीकृति देता है। इस वजह से, पहचानकर्ता/आरक्षित शब्द टकराव तब हो सकता है जब एक भाषा में फंक्शनान्वित कोड किसी अन्य भाषा में लिखे गए कोड को निष्पादित करने का प्रयास करता है। उदाहरण के लिए, एक Visual Basic .NET|Visual Basic.NET लाइब्रेरी में क्लास (कंप्यूटर विज्ञान) की परिभाषा हो सकती है जैसे:
 
' Class Definition of This in Visual Basic.NET:
<वाक्यविन्यास लैंग = vbnet>
' Visual Basic.NET में इसकी वर्ग परिभाषा:
Public Class this
 
        ' This class does something...
पब्लिक क्लास यह
End Class
        'यह वर्ग कुछ करता है ...
अंत वर्ग
</वाक्यविन्यास हाइलाइट>
 
यदि यह एक टूलबॉक्स के हिस्से के रूप में संकलित और वितरित किया जाता है, तो एक सी शार्प (प्रोग्रामिंग भाषा) | सी # प्रोग्रामर, प्रकार के एक चर को परिभाषित करने की इच्छा रखते हैं।<code>this</code>"एक समस्या का सामना करना पड़ेगा: <code>'this'</code> सी # में एक आरक्षित शब्द है। इस प्रकार, निम्नलिखित सी # में संकलित नहीं होंगे:
 
<वाक्यविन्यास प्रकाश लैंग = csharp>
// सी # में इस वर्ग का उपयोग करना:
 
यह एक्स = नया यह (); // संकलित नहीं होगा!
</वाक्यविन्यास हाइलाइट>


यदि यह एक टूलबॉक्स के हिस्से के रूप में संकलित और वितरित किया जाता है, तो एक सी शार्प (प्रोग्रामिंग भाषा) | सी # प्रोग्रामर, प्रकार के एक वेरिएबल को परिभाषित करने की इच्छा रखते हैं।<code>this</code>"एक समस्या का सामना करना पड़ेगा: <code>'this'</code> सी # में एक आरक्षित शब्द है। इस प्रकार, निम्नलिखित सी # में संकलित नहीं होंगे:
// Using This Class in C#:
this x = new this();  // Won't compile!
सदस्यों तक पहुँचने, आभासी तरीकों को ओवरराइड करने और नामस्थानों की पहचान करने पर एक समान समस्या उत्पन्न होती है।
सदस्यों तक पहुँचने, आभासी तरीकों को ओवरराइड करने और नामस्थानों की पहचान करने पर एक समान समस्या उत्पन्न होती है।


यह स्ट्रॉपिंग (वाक्यविन्यास) द्वारा हल किया जाता है। इस समस्या के आसपास काम करने के लिए, विनिर्देश प्रोग्रामर को (सी # में) पहचानकर्ता से पहले [[संकेत पर]] करने की अनुमति देता है जो इसे संकलक द्वारा आरक्षित शब्द के बजाय पहचानकर्ता माना जाता है:
यह स्ट्रॉपिंग (वाक्यविन्यास) द्वारा हल किया जाता है। इस समस्या के आसपास काम करने के लिए, विनिर्देश प्रोग्रामर को (सी # में) पहचानकर्ता से पहले [[संकेत पर]] करने की स्वीकृति देता है जो इसे संकलक द्वारा आरक्षित शब्द के अतिरिक्त पहचानकर्ता माना जाता है:
 
// Using This Class in C#:
<वाक्यविन्यास प्रकाश लैंग = csharp>
// सी # में इस वर्ग का उपयोग करना:
@this x = new @this(); // Will compile!
 
स्थिरता के लिए, गैर-सार्वजनिक सेटिंग्स जैसे स्थानीय वेरिएबल, पैरामीटर नाम और निजी सदस्यों में भी इस उपयोग की स्वीकृति है।
@ यह एक्स = नया @ यह (); // संकलन करेंगे!
</वाक्यविन्यास हाइलाइट>
 
स्थिरता के लिए, गैर-सार्वजनिक सेटिंग्स जैसे स्थानीय चर, पैरामीटर नाम और निजी सदस्यों में भी इस उपयोग की अनुमति है।


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

Revision as of 15:19, 24 February 2023

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

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

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

भेद

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

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

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

यदि eq 0 तो 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] सी ++ 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] सी प्रोग्रामिंग भाषा के लिए आईएसओ 9899 मानक कीवर्ड शब्द का उपयोग करता है।[13] कई भाषाओं में, जैसे सी (प्रोग्रामिंग भाषा) और समान वातावरण जैसे सी ++, एक कीवर्ड एक आरक्षित शब्द है जो एक वाक्य रचनात्मक रूप की पहचान करता है। नियंत्रण प्रवाह निर्माण में प्रयुक्त शब्द, जैसे if, then, और else कीवर्ड हैं। इन भाषाओं में, कीवर्ड का उपयोग वेरिएबल्स या फ़ंक्शंस के नाम के रूप में भी नहीं किया जा सकता है।

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

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

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

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

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

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

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

नुकसान

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

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


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

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

' Class Definition of This in Visual Basic.NET:

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


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

// Using This Class in C#:

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

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

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

// 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.