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

From Vigyanwiki

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

उदाहरण के लिए, कई प्रोग्रामिंग लैंग्वेज क्रम डेटा प्रकार के तत्वों को संदर्भित करने और अपडेट करने के लिए विशेष सिंटैक्स प्रदान करती हैं। संक्षेप में, एक सरणी संदर्भ दो तर्कों की एक प्रक्रिया है: एक सरणी और एक सबस्क्रिप्ट चर, जिसे इस प्रकार व्यक्त किया जा सकता है get_array(Array, vector(i,j)). इसके अतिरिक्त, कई लैंग्वेजएँ वाक्यविन्यास प्रदान करती हैं जैसे कि Array[i,j]. इसी प्रकार, उदाहरण के लिए, एक सरणी तत्व अद्यतन तीन तर्कों से युक्त एक प्रक्रिया है set_array(Array, vector(i,j), value), लेकिन कई लैंग्वेजएँ वाक्यविन्यास भी प्रदान करती हैं जैसे Array[i,j] = value.

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

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

उत्पत्ति

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

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

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


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

  • COBOL में, कई मध्यवर्ती कीवर्ड सिंटैक्टिक शुगर हैं जिन्हें वैकल्पिक रूप से छोड़ा जा सकता है। उदाहरण के लिए, वाक्य MOVE A B. और वाक्य MOVE A TO B. बिल्कुल वही कार्य निष्पादित करें, लेकिन दूसरा निष्पादित की जाने वाली क्रिया को स्पष्ट बनाता है।
  • संवर्धित असाइनमेंट या कंपाउंड असाइनमेंट ऑपरेटर: उदाहरण के लिए, a+=b के बराबर है a = a + b सी और इसी तरह की लैंग्वेजो में, यह मानते हुए a जैसे कोई साइड इफेक्ट नहीं है a एक नियमित चर है।[5][6] कुछ लैंग्वेजे, जैसे पायथन (प्रोग्रामिंग लैंग्वेज)[7] ऑपरेटर को संवर्धित असाइनमेंट ऑपरेटरों को ओवरलोड करने की अनुमति मिल सकती है, इसलिए वे मानक ऑपरेटरों से भिन्न व्यवहार कर सकते हैं।
  • पर्ल में, unless (condition) {...} के लिए सिंटैक्टिक शुगर है if (not condition) {...}. इसके अतिरिक्त, किसी भी कथन के बाद एक शर्त लगाई जा सकती है, इसलिए statement if condition के बराबर है if (condition) {statement}, लेकिन पहला अधिक स्वाभाविक रूप से एक ही पंक्ति में स्वरूपित होता है।
  • C (प्रोग्रामिंग लैंग्वेज) में, a[i] संकेतन के लिए सिंटैक्टिक शुगर है *(a + i).[8] इसी प्रकार, a->x सिंटैक्स के लिए नोटेशन सिंटैक्टिक शुगर है,डीरेफ़रेंस ऑपरेटर का उपयोग करके सदस्यों तक पहुंचना (*a).x.
  • usingC# (प्रोग्रामिंग लैंग्वेज) में स्टेटमेंट यह सुनिश्चित करता है कि कुछ वस्तुओं का प्रवण सही ढंग से किया गया है। कंपाइलर स्टेटमेंट को एक्सेप्शन हेंडलिंग ट्राई-फाइनली ब्लॉक में विस्तारित करता है।[9]
  • C# लैंग्वेज वेरिएबल्स को स्पष्ट करने की अनुमति देती है var x = expr, जो कंपाइलर को टाइप के प्रकार का अनुमान लगाने की अनुमति देता है x अभिव्यक्ति से expr, एक स्पष्ट प्रकार की स्पष्ट की आवश्यकता के अतिरिक्त है। इसी प्रकार, C++ अनुमति देता है auto x = expr चूँकि C++11 और Java अनुमति देते हैं var x = expr जावा 11 के बाद से।
  • पायथन कम्पेरिजन_ऑफ_प्रोग्रामिंग_लैंग्वेज_(लिस्ट_कॉम्प्रिहेंशन) पायथन (जैसे [x*x for x in range(10)] वर्गों की सूची के लिए) और पायथन सिंटैक्स और सिमेंटिक्स डेकोरेटर्स (जैसे @staticmethod) ।
  • हास्केल (प्रोग्रामिंग लैंग्वेज) में, उद्धरण चिह्नों में दर्शाई गई एक स्ट्रिंग, शब्दार्थ की दृष्टि से वर्णों की सूची के बराबर होती है।
  • R (प्रोग्रामिंग लैंग्वेज) पैकेजों के सुव्यवस्थित संग्रह में, पाइप, द्वारा दर्शाया गया है %>%, स्पष्ट करता है कि पाइप से पहले का डेटा (या फ़ंक्शन का आउटपुट) पाइप के बाद वाले फ़ंक्शन के लिए पहले तर्क के रूप में काम करेगा।[10] इसलिए, x %>% f(y)f(x,y)के बराबर है।
  • एसक्यूएल में, एक मात्र JOIN एक के बराबर है INNER JOIN, बाद वाला स्पष्ट करता है कि जॉइन स्टेटमेंट बाहरी जॉइन ऑपरेशन के विपरीत विशेष रूप से एक आंतरिक जॉइन ऑपरेशन है। इसी तरह, कोई भी इसे छोड़ सकता है OUTER से LEFT OUTER JOIN, RIGHT OUTER JOIN और FULL OUTER JOIN.
  • ओओपी लैंग्वेजो में कॉल करने की विधि myObject.myMethod(parameter1, parameter2, parameter3) वैश्विक फ़ंक्शन को कॉल करने के लिए सिंटैक्टिक शुगर है myMethod(myObject, parameter1, parameter2, parameter3). ऑब्जेक्ट का संदर्भ एक छिपे हुए तर्क के रूप में पारित किया जाता है, जिसे सामान्यतः विधि के भीतर से एक्सेस किया जा सकता हैthis.
  • मेथड कॉल तकनीकी रूप से पॉइंटर को पैरामीटर के रूप में पास करने के लिए सिंटैक्टिक शुगर है, लेकिन फ़ंक्शन के अंदर कोड में लगातार पॉइंटर डी-रेफरेंसिंग से बचने के लिए, सिंटैक्टिक रूप से इसे वेरिएबल के रूप में संभालना है।
  • जावा (प्रोग्रामिंग लैंग्वेज) में, import स्पष्ट संकलक को उन वर्गों को खोजने में सक्षम बनाती है जो अन्यथा पूरी तरह से योग्य नामों के साथ निर्दिष्ट नहीं हैं। उदाहरण के लिए import javax.swing.*; प्रोग्रामर को स्विंग (जावा) ऑब्जेक्ट को संदर्भित करने की अनुमति देता है जैसे javax.swing.JButton छोटे नामJButton का उपयोग करना हैं।
  • जावास्क्रिप्ट के ES6 संस्करण में, एरो फ़ंक्शन का संक्षिप्त संस्करण है (x) => x + 1 यह लंबे समय(x) => { return x + 1; }के बराबर है।

आलोचना

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

व्युत्पन्न पद

सिंटैक्टिक सॉल्ट

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

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

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

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

सिंटैक्टिकसाकारीन

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

शुगर्ड टाइप

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

टिप्पणियाँ

  1. Landin, Peter J. (1964). "भावों का यांत्रिक मूल्यांकन" (PDF). The Computer Journal. Computer Journal. 6 (4): 308–320. doi:10.1093/comjnl/6.4.308. Retrieved 21 July 2014.
  2. Abelson & Sussman 1996, Chapter 1, footnote 11.
  3. Barbara Liskov, "A History of CLU", MIT Laboratory for Computer Science Technical Report 561 (1993)
  4. Felleisen, Matthias (December 1991). "प्रोग्रामिंग भाषाओं की अभिव्यंजक शक्ति पर". Science of Computer Programming. Springer-Verlag. 17 (1–3): 35–75. doi:10.1016/0167-6423(91)90036-W. Retrieved 19 July 2014.
  5. "सी कंपाउंड असाइनमेंट". msdn.microsoft.com. Microsoft. Retrieved 20 June 2016. However, the compound-assignment expression is not equivalent to the expanded version because the compound-assignment expression evaluates expression1 only once, while the expanded version evaluates expression1 twice: in the addition operation and in the assignment operation.
  6. Garavaglia, Emilio (26 July 2015). "Why are shortcuts like x += y considered good practice?". stackexchange.com. Retrieved 20 June 2016. optimization can [be done] if 'finding x' has no side effects
  7. "पायथन डेटा मॉडल". docs.python.org. 21 December 2020.
  8. Raymond, Eric S. (11 October 1996). The New Hacker's Dictionary – 3rd Edition. MIT Press. p. 432. ISBN 978-0-262-68092-9. Retrieved 5 August 2012.
  9. "कथन का उपयोग करना (सी# संदर्भ)". Retrieved 16 September 2014.
  10. "magrittr: Vignette". Retrieved 24 December 2018.
  11. Abelson & Sussman 1996, Chapter 1, footnote 11.
  12. Perlis 1982, Epigram #3.
  13. "शब्दजाल फ़ाइल - वाक्यात्मक नमक". 2003-06-12. Archived from the original on 2003-06-12. Retrieved 2018-03-19.
  14. "नया संशोधक (सी# संदर्भ)". microsoft.com. Microsoft. Retrieved 3 August 2015.
  15. "स्विच (सी# संदर्भ)". microsoft.com. Microsoft. Retrieved 3 August 2015.
  16. "वाक्यात्मक शर्करा". catb.org. Retrieved 3 August 2015.
  17. Boiten, Eerke A.; Möller, Bernhard (2002-06-26). प्रोग्राम निर्माण का गणित. ISBN 9783540438571. Retrieved 3 August 2015.
  18. Dean, Thomas (2004). Talking with Computers: Explorations in the Science and Technology of Computing. Cambridge University Press. p. 115. ISBN 9780521542043.
  19. Harrison, William; Sheard, Tim (July 8–10, 2002). "प्रोग्राम निर्माण का गणित" (PDF). Mathematics of Program Construction: 6th International Conference, MPC 2002, Dagstuhl Castle, Germany, July 8–10, 2002. Proceedings. International Conference on प्रोग्राम निर्माण का गणित. Lecture Notes in Computer Science. Vol. 2386. Dagstuhl Castle, Germany: Springer Berlin Heidelberg. p. 93. doi:10.1007/3-540-45442-X_6. ISBN 978-3-540-43857-1. S2CID 10059915. Archived from the original (PDF) on March 31, 2017.
  20. Chugh, Ravi (2013). जावास्क्रिप्ट के लिए नेस्टेड शोधन प्रकार (PhD). UC San Diego.
  21. "सी भाषा एलएलवीएम दस्तावेज़ीकरण". clang.llvm.org. Retrieved 30 June 2020.
  22. "स्विफ्ट में प्रकारों का गुप्त जीवन". medium.com/@slavapestov. 14 July 2016. Retrieved 30 June 2020.


संदर्भ