आरक्षित शब्द

From Vigyanwiki
Revision as of 15:39, 17 February 2023 by alpha>Indicwiki (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...")
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)

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

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

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

भेद

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

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

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

यदि eq 0 तो 1 fi

हालाँकि, ALGOL 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]

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 thread_local keyword to designate static storage local to one thread. C11 defines the new keyword as _Thread_local. In the new C11 header <threads.h>, there is a macro definition to provide the normal‐looking name:[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]


परिभाषा

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

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

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

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

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

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

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

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

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

नुकसान

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

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


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

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

<वाक्यविन्यास लैंग = vbnet> ' Visual Basic.NET में इसकी वर्ग परिभाषा:

पब्लिक क्लास यह

       'यह वर्ग कुछ करता है ...

अंत वर्ग </वाक्यविन्यास हाइलाइट>

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

<वाक्यविन्यास प्रकाश लैंग = csharp> // सी # में इस वर्ग का उपयोग करना:

यह एक्स = नया यह (); // संकलित नहीं होगा! </वाक्यविन्यास हाइलाइट>

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

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

<वाक्यविन्यास प्रकाश लैंग = csharp> // सी # में इस वर्ग का उपयोग करना:

@ यह एक्स = नया @ यह (); // संकलन करेंगे! </वाक्यविन्यास हाइलाइट>

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

यह भी देखें

संदर्भ

  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.