सिंटैक्टिक शुगर
कंप्यूटर विज्ञान में, सिंटैक्टिक शुगर एक प्रोग्रामिंग भाषा के भीतर सिंटैक्स (प्रोग्रामिंग भाषाएं) है जिसे चीजों को पढ़ने या व्यक्त करने में आसान बनाने के लिए डिज़ाइन किया गया है। यह मानव उपयोग के लिए भाषा को अधिक मधुर बनाता है: चीजों को अधिक स्पष्ट रूप से, अधिक संक्षिप्त रूप से, या वैकल्पिक शैली में व्यक्त किया जा सकता है जिसे कुछ लोग पसंद कर सकते हैं। सिंटेक्स शुगर सामान्यतः एक साधारण ऑपरेशन के लिए एक आशुलिपि है जिसे एक वैकल्पिक, अधिक क्रियात्मक, रूप में भी व्यक्त किया जा सकता है: प्रोग्रामर के पास यह विकल्प होता है कि वह छोटे रूप का उपयोग करे या लंबे रूप का, लेकिन सामान्यतः छोटे रूप का उपयोग करेगा क्योंकि यह छोटा है और टाइप करना और पढ़ना आसान है।
उदाहरण के लिए, कई प्रोग्रामिंग भाषाएं क्रम डेटा प्रकार के तत्वों को संदर्भित करने और अपडेट करने के लिए विशेष सिंटैक्स प्रदान करती हैं। संक्षेप में, एक सरणी संदर्भ दो तर्कों की एक प्रक्रिया है: एक सरणी और एक सबस्क्रिप्ट चर, जिसे इस प्रकार व्यक्त किया जा सकता है 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}
, लेकिन पहला अधिक स्वाभाविक रूप से एक ही पंक्ति में स्वरूपित होता है। - सी (प्रोग्रामिंग भाषा) में,
a[i]
संकेतन के लिए सिंटैक्टिक शुगर है*(a + i)
.[8] इसी प्रकार,a->x
सिंटैक्स के लिए नोटेशन सिंटैक्टिक शुगर है,डीरेफ़रेंस ऑपरेटर का उपयोग करके सदस्यों तक पहुंचना(*a).x
. using
C# (प्रोग्रामिंग भाषा) में स्टेटमेंट यह सुनिश्चित करता है कि कुछ वस्तुओं का प्रवण सही ढंग से किया गया है। कंपाइलर स्टेटमेंट को एक्सेप्शन हेंडलिंग ट्राई-फाइनली ब्लॉक में विस्तारित करता है।[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
) । - हास्केल (प्रोग्रामिंग भाषा) में, उद्धरण चिह्नों में दर्शाई गई एक स्ट्रिंग, शब्दार्थ की दृष्टि से वर्णों की सूची के बराबर होती है।
- आर (प्रोग्रामिंग भाषा) पैकेजों के सुव्यवस्थित संग्रह में, पाइप, द्वारा दर्शाया गया है
%>%
, घोषित करता है कि पाइप से पहले का डेटा (या फलन का आउटपुट) पाइप के बाद वाले फलन के लिए पहले तर्क के रूप में काम करेगा।[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] विशेष रूप से, सिंटैक्टिक नमक एक घेरा है जिसे प्रोग्रामर को केवल यह साबित करने के लिए कूदना चाहिए कि वे जानते हैं कि क्या चल रहा है, न कि किसी प्रोग्राम की कार्रवाई को व्यक्त करने के लिए। उदाहरण के लिए, जावा (प्रोग्रामिंग भाषा) और पास्कल (प्रोग्रामिंग भाषा) में अतिरिक्त सिंटैक्स के बिना पूर्णांक के रूप में घोषित एक चर के लिए एक फ़्लोटिंग-पॉइंट अंकगणित निर्दिष्ट करना स्पष्ट रूप से बताता है कि इरादे के परिणामस्वरूप एक संकलन त्रुटि होगी, जबकि सी (प्रोग्रामिंग भाषा) और सी ++ स्वचालित रूप से एक इंट को सौंपे गए किसी भी फ़्लोट्स को छोटा कर देगा। हालाँकि यह वाक्यविन्यास नहीं है, बल्कि शब्दार्थ है।
सी शार्प (प्रोग्रामिंग भाषा)|सी# में, विरासत में मिले वर्ग सदस्य को छुपाते समय, एक कंपाइलर चेतावनी जारी की जाती है जब तक कि new
कीवर्ड का उपयोग यह निर्दिष्ट करने के लिए किया जाता है कि छिपाना जानबूझकर किया गया है।[14] C या C++ के साथ स्विच कथन सिंटैक्स की समानता के कारण संभावित बग से बचने के लिए, C# को एक की आवश्यकता होती है break
प्रत्येक गैर-रिक्त के लिए case
ए का लेबल switch
(जब तक goto
, return
, या throw
प्रयोग किया जाता है) भले ही यह अंतर्निहित गिरावट की अनुमति नहीं देता है।[15] (उपयोग करना goto
और बाद के लेबल को निर्दिष्ट करने से C/C++ जैसा फॉल-थ्रू उत्पन्न होता है।)
सिंटैक्टिक नमक कोड को अपठनीय बनाकर इसके उद्देश्य को विफल कर सकता है और इस प्रकार इसकी गुणवत्ता खराब कर सकता है - चरम मामलों में, कोड का आवश्यक हिस्सा भाषा की आवश्यकताओं को पूरा करने के लिए शुरू किए गए ओवरहेड से छोटा हो सकता है।
सिंटैक्टिक सॉल्ट का एक विकल्प कंपाइलर चेतावनियाँ उत्पन्न करना है जब इस बात की अधिक संभावना होती है कि कोड किसी गलती का परिणाम है - आधुनिक सी/सी++ कंपाइलरों में एक आम प्रथा।
वाक्यात्मक साकारीन
अन्य एक्सटेंशन सिंटैक्टिक सैकरिन और सिंटैक्टिक सिरप हैं, जिसका अर्थ है अनावश्यक सिंटैक्स जो प्रोग्रामिंग को आसान नहीं बनाता है।[16][17][18][19]
चीनी युक्त प्रकार
कोर सिंटैक्टिक समर्थन वाले डेटा प्रकारों को शर्करायुक्त प्रकार कहा जाता है।[20][21][22] सामान्य उदाहरणों में उद्धरण-सीमांकित स्ट्रिंग, ऑब्जेक्ट और रिकॉर्ड प्रकारों के लिए घुंघराले ब्रेसिज़ और सरणी के लिए वर्गाकार ब्रैकेट सम्मिलित हैं।
टिप्पणियाँ
- ↑ 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.
- ↑ Abelson & Sussman 1996, Chapter 1, footnote 11.
- ↑ Barbara Liskov, "A History of CLU", MIT Laboratory for Computer Science Technical Report 561 (1993)
- ↑ 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.
- ↑ "सी कंपाउंड असाइनमेंट". 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.
- ↑ 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
- ↑ "पायथन डेटा मॉडल". docs.python.org. 21 December 2020.
- ↑ 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.
- ↑ "कथन का उपयोग करना (सी# संदर्भ)". Retrieved 16 September 2014.
- ↑ "magrittr: Vignette". Retrieved 24 December 2018.
- ↑ Abelson & Sussman 1996, Chapter 1, footnote 11.
- ↑ Perlis 1982, Epigram #3.
- ↑ "शब्दजाल फ़ाइल - वाक्यात्मक नमक". 2003-06-12. Archived from the original on 2003-06-12. Retrieved 2018-03-19.
- ↑ "नया संशोधक (सी# संदर्भ)". microsoft.com. Microsoft. Retrieved 3 August 2015.
- ↑ "स्विच (सी# संदर्भ)". microsoft.com. Microsoft. Retrieved 3 August 2015.
- ↑ "वाक्यात्मक शर्करा". catb.org. Retrieved 3 August 2015.
- ↑ Boiten, Eerke A.; Möller, Bernhard (2002-06-26). प्रोग्राम निर्माण का गणित. ISBN 9783540438571. Retrieved 3 August 2015.
- ↑ Dean, Thomas (2004). Talking with Computers: Explorations in the Science and Technology of Computing. Cambridge University Press. p. 115. ISBN 9780521542043.
- ↑ 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.
- ↑ Chugh, Ravi (2013). जावास्क्रिप्ट के लिए नेस्टेड शोधन प्रकार (PhD). UC San Diego.
- ↑ "सी भाषा एलएलवीएम दस्तावेज़ीकरण". clang.llvm.org. Retrieved 30 June 2020.
- ↑ "स्विफ्ट में प्रकारों का गुप्त जीवन". medium.com/@slavapestov. 14 July 2016. Retrieved 30 June 2020.
संदर्भ
- Abelson, Harold; Sussman, Gerald Jay; Sussman, Julie (1996) [1984]. Structure and Interpretation of Computer Programs. Cambridge, MA: MIT Press. ISBN 0-262-51087-1.
- Landin, Peter J. (February–March 1965). "A Correspondence Between ALGOL 60 and Church's Lambda-Notation: Parts I and II". Communications of the ACM. 8 (2.3): 89–101, 158–165. doi:10.1145/363744.363749. S2CID 6505810.
- Landin, Peter J. (March 1965). "Programming Without Imperatives – An Example". UNIVAC Systems Programming Research.
- Landin, Peter J. (July 1965). "Getting Rid of Labels". UNIVAC Systems Programming Research.
- Landin, Peter J. (August 1965). "A Generalization of Jumps and Labels". UNIVAC Systems Programming Research., reprinted in "Higher-Order and Symbolic Computation". 11. 1998: 125–143. CiteSeerX 10.1.1.85.2610.
{{cite journal}}
: Cite journal requires|journal=
(help) - Perlis, A. J. (September 1982). "Epigrams on programming". ACM SIGPLAN Notices. New York, NY, USA: Association for Computing Machinery. 17 (9): 7–13. doi:10.1145/947955.1083808. S2CID 20512767. Archived from the original on January 17, 1999.