सिंटैक्टिक शुगर

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

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

किसी भाषा में एक निर्माण सिंटैक्टिक शुगर है यदि इसे भाषा से हटाया जा सकता है बिना किसी प्रभाव के कि भाषा क्या कर सकती है: कार्यात्मकता (इंजीनियरिंग) और अभिव्यक्ति शक्ति (कंप्यूटर विज्ञान) वही रहेगी।

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

उत्पत्ति
सिंटैक्टिक शुगर शब्द को पीटर जे. लैंडिन ने 1964 में एक सरल ALGOL जैसी प्रोग्रामिंग भाषा के सतह सिंटैक्स का वर्णन करने के लिए आविष्कार किया था, जिसे लैम्ब्डा कैलकुलस के अनुप्रयोगात्मक अभिव्यक्तियों के संदर्भ में शब्दार्थ रूप से परिभाषित किया गया था, शाब्दिक रूप से λ को जहां से बदलने पर केंद्रित है।

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

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

उल्लेखनीय उदाहरण

 * COBOL में, कई मध्यवर्ती कीवर्ड सिंटैक्टिक शुगर हैं जिन्हें वैकल्पिक रूप से छोड़ा जा सकता है। उदाहरण के लिए, वाक्य  और वाक्य   बिल्कुल वही कार्य निष्पादित करें, लेकिन दूसरा निष्पादित की जाने वाली क्रिया को स्पष्ट बनाता है।
 * संवर्धित असाइनमेंट या कंपाउंड असाइनमेंट ऑपरेटर: उदाहरण के लिए,  के बराबर है   सी और इसी तरह की भाषाओं में, यह मानते हुए   जैसे कोई साइड इफेक्ट नहीं है   एक नियमित चर है।  कुछ भाषाएँ, जैसे पायथन (प्रोग्रामिंग भाषा) ऑपरेटर को संवर्धित असाइनमेंट ऑपरेटरों को ओवरलोड करने की अनुमति मिल सकती है, इसलिए वे मानक ऑपरेटरों से भिन्न व्यवहार कर सकते हैं।
 * पर्ल में,  के लिए सिंटैक्टिक शुगर है  . इसके अतिरिक्त, किसी भी कथन के बाद एक शर्त लगाई जा सकती है, इसलिए   के बराबर है , लेकिन पहला अधिक स्वाभाविक रूप से एक ही पंक्ति में स्वरूपित होता है।
 * सी (प्रोग्रामिंग भाषा) में,  संकेतन के लिए सिंटैक्टिक शुगर है  . इसी प्रकार,   सिंटैक्स के लिए नोटेशन सिंटैक्टिक शुगर है,डीरेफ़रेंस ऑपरेटर का उपयोग करके सदस्यों तक पहुंचना.
 * C# (प्रोग्रामिंग भाषा) में स्टेटमेंट यह सुनिश्चित करता है कि कुछ वस्तुओं का प्रवण सही ढंग से किया गया है। कंपाइलर स्टेटमेंट को  एक्सेप्शन हेंडलिंग ट्राई-फाइनली ब्लॉक में विस्तारित करता है।
 * C# भाषा वेरिएबल्स को स्पष्ट करने की अनुमति देती है, जो कंपाइलर को टाइप के प्रकार का अनुमान लगाने की अनुमति देता है   अभिव्यक्ति से  , एक स्पष्ट प्रकार की घोषणा की आवश्यकता के अतिरिक्त है। इसी प्रकार, C++ अनुमति देता है   चूँकि C++11 और Java अनुमति देते हैं   जावा 11 के बाद से।
 * पायथन कम्पेरिजन_ऑफ_प्रोग्रामिंग_लैंग्वेज_(लिस्ट_कॉम्प्रिहेंशन) पायथन (जैसे  वर्गों की सूची के लिए) और पायथन सिंटैक्स और सिमेंटिक्स डेकोरेटर्स (जैसे  ) ।
 * हास्केल (प्रोग्रामिंग भाषा) में, उद्धरण चिह्नों में दर्शाई गई एक स्ट्रिंग, शब्दार्थ की दृष्टि से वर्णों की सूची के बराबर होती है।
 * आर (प्रोग्रामिंग भाषा) पैकेजों के सुव्यवस्थित संग्रह में, पाइप, द्वारा दर्शाया गया है, घोषित करता है कि पाइप से पहले का डेटा (या फलन का आउटपुट) पाइप के बाद वाले फलन के लिए पहले तर्क के रूप में काम करेगा। इसलिए,
 * एसक्यूएल में, एक मात्र  एक के बराबर है , बाद वाला स्पष्ट करता है कि जॉइन स्टेटमेंट बाहरी जॉइन ऑपरेशन के विपरीत विशेष रूप से एक आंतरिक जॉइन ऑपरेशन है। इसी तरह, कोई भी इसे छोड़ सकता है   से  ,   और.
 * ओओपी भाषाओं में कॉल करने की विधि  वैश्विक फलन को कॉल करने के लिए सिंटैक्टिक शुगर है  . ऑब्जेक्ट का संदर्भ एक छिपे हुए तर्क के रूप में पारित किया जाता है, जिसे सामान्यतः विधि के भीतर से एक्सेस किया जा सकता है.
 * संदर्भ द्वारा कॉल तकनीकी रूप से पॉइंटर को पैरामीटर के रूप में पास करने के लिए सिंटैक्टिक शुगर है, लेकिन फलन के अंदर कोड में लगातार पॉइंटर डी-रेफरेंसिंग से बचने के लिए, सिंटैक्टिक रूप से इसे वेरिएबल के रूप में संभालना है।
 * जावा (प्रोग्रामिंग भाषा) में, ए  घोषणा संकलक को उन वर्गों को खोजने में सक्षम बनाती है जो अन्यथा पूरी तरह से योग्य नामों के साथ निर्दिष्ट नहीं हैं। उदाहरण के लिए   प्रोग्रामर को स्विंग (जावा) ऑब्जेक्ट को संदर्भित करने की अनुमति देता है जैसे   छोटे नाम
 * जावास्क्रिप्ट के ES6 संस्करण में, एरो फलन का संक्षिप्त संस्करण है  यह लंबे समय

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

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

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

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

सिंटैक्टिक सॉल्ट का एक विकल्प कंपाइलर चेतावनियाँ उत्पन्न करता है जब इस बात की अधिक संभावना होती है कि कोड किसी गलती का परिणाम है - आधुनिक C/C++ कंपाइलरों में सामान्य अभ्यास है।

सिंटैक्टिक साकारीन
अन्य एक्सटेंशन सिंटैक्टिक सैकरिन और सिंटैक्टिक सिरप हैं, जिसका अर्थ है अनावश्यक सिंटैक्स जो प्रोग्रामिंग को आसान नहीं बनाता है।

शुगर्ड टाइप
कोर सिंटैक्टिक आधार वाले डेटा प्रकारों को शुगर्ड टाइप कहा जाता है।  सामान्य उदाहरणों में उद्धरण-सीमांकित स्ट्रिंग, ऑब्जेक्ट और रिकॉर्ड प्रकारों के लिए क्यूरी ब्रेसेस और सरणी के लिए वर्गाकार ब्रैकेट सम्मिलित हैं।

संदर्भ

 * , reprinted in
 * , reprinted in
 * , reprinted in
 * , reprinted in
 * , reprinted in