सिंथेटिक शुगर की कठोर परिभाषा? [बन्द है]


9

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

जवाबों:


19

इसके बारे में कैसे: "वाक्यविन्यास चीनी कुछ कार्यक्षमता के लिए एक सुविधा शॉर्टहैंड है जो अमूर्तता की किसी भी सार्थक परत को पेश नहीं करता है।"

ले a->b, जो, जैसा कि आप इंगित करते हैं, के बराबर है (*a).b। क्या यह नोटेशन आपको किसी उपयोगी, अन्यथा छिपे हुए तरीके से कोड पर विचार करने की अनुमति देता है? नहीं, तो यह सिंथेटिक चीनी है।

अब विचार करें a[i] == *(a + i)। किसी भी C प्रोग्राम के बारे में सोचें जो किसी भी तरह से सरणियों का उपयोग करता है। क्या आप कल्पना के बिना इसे समझने की कोशिश कर सकते हैं []? बहुआयामी सरणियों के साथ? यह संपूर्ण इकाइयों के रूप में सरणियों पर विचार करने के लिए सार्थक है, स्मृति के एक सन्निहित ब्लॉक की शुरुआत के संदर्भ के रूप में नहीं। हालांकि यह जानने में मदद करता है कि सी में एरेज़ कैसे काम करते हैं यदि आप उनके साथ जटिल चीजें करने की योजना बना रहे हैं, तो यह सोचना हमेशा अनुत्पादक होता है कि "मुझे दो बिट्स मेमोरी 2 * i बाइट को स्टोर करने की आवश्यकता है" द्वारा संदर्भित मेमोरी लोकेशन a। " एक सरणी का पूरा बिंदु एक सुसंगत इकाई के रूप में एक अनुक्रम को संग्रहीत करने की प्रक्रिया को दूर करने की क्षमता है। []अंकन इस अमूर्त की सुविधा। यह सिंटैक्टिक शुगर नहीं है

इसका मतलब यह नहीं है कि सिंटैक्टिक शुगर हमेशा खराब होती है। कई आबंटनों की तरह, यह "वास्तविक सुविधाओं" के खिलाफ एक एपिथेट और ढेर बन गया है। लेकिन LISP और स्कीम, उदाहरण के लिए, letशॉर्टहैंड (और अन्य) के लिए नहीं तो अपठनीय होगी ।

टर्नेरी ऑपरेटर, <pred> ? <cnsq> : <alt>एक और उदाहरण है। सिंथेटिक चीनी कार्यक्रमों को व्यवस्थित करने और अनावश्यक कोड को हटाने में मदद कर सकती है, जिससे लाइन के रखरखाव में बचत हो सकती है। सिंथेटिक चीनी कभी-कभी "वास्तविक सुविधाओं" पर जमा करने के लिए बेहतर हो सकती है, अगर यह प्रोग्रामिंग के लिए सिंथेटिक बाधाओं को दूर करने में मदद करता है।

R ^ 5RS को उद्धृत करने के लिए , "प्रोग्रामिंग भाषाओं को फीचर के शीर्ष पर पाइलिंग फीचर द्वारा नहीं, बल्कि अतिरिक्त सुविधाओं को बनाने वाली कमजोरियों और प्रतिबंधों को हटाकर आवश्यक रूप से प्रदर्शित किया जाना चाहिए।" IMHO, सिंटैक्स एक कमजोरी और प्रतिबंध के रूप में अर्हता प्राप्त कर सकता है और इसलिए प्रोग्रामर को सिंटैक्स से दूर होने देने से भाषा की अभिव्यंजना में वृद्धि हो सकती है।


7

IMHO मुझे नहीं लगता कि आपके पास सिंथैटिक शुगर के लिए एक परिभाषा हो सकती है, क्योंकि वाक्यांश बीएस है और लोगों द्वारा "वास्तविक प्रोग्रामर" के बारे में "वास्तविक ऑपरेटिंग सिस्टम" का उपयोग करके "वास्तविक प्रोग्रामर" के बारे में बात करने की संभावना है।

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

इसके बीएस क्योंकि कुछ लोगों का तर्क है कि चीनी के इस्तेमाल से बचना चाहिए क्योंकि आप बग लिख सकते हैं, लेकिन आपको उससे चिपके रहना चाहिए क्योंकि इसके बग को लिखना मुश्किल है। है ना कमाल। एक ही वाक्यांश एक ही तर्क का उपयोग करके विपरीत निष्कर्षों की ओर जाता है।

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

इसके बीएस क्योंकि लोग अक्सर गलत होते हैं या तुल्यता के बारे में गलत हो जाते हैं। उदाहरण के लिए, यह सवाल जोर देता है कि एक चार सरणी के लिए एक सी # स्ट्रिंग चीनी है। वे नहीं कर रहे हैं

हालाँकि यदि आप कहना चाहते हैं कि दो चीजें चीनी हैं यदि वे शब्दार्थ के समकक्ष हैं और यह आगे बढ़ने में मदद करता है और इसे वैसे भी परिभाषित करता है जैसा आप चाहते हैं।

यदि आप किसी ऐसे व्यक्ति से बर्खास्त होना चाहते हैं तो आप वाक्यांश का उपयोग भी कर सकते हैं।


2
"यदि आप किसी ऐसे व्यक्ति को खारिज करना चाहते हैं जिसे आप वाक्यांश का उपयोग भी कर सकते हैं।" - जैसा कि: "क्या आप बारबरा से मिले थे? वह हमारी कृत्रिम चीनी है।"
मोल्फ

@molf। यह बहुत मजेदार है। मुझे लगता है कि मेरा मतलब किसी के विचार या काम या औजार से था। जैसे: "क्या आप बारबरा से मिले थे, वह सोचती है कि वह एक वास्तविक कोडर है लेकिन वह बहुत अधिक चीनी का उपयोग करती है।" या "बारबरा v8.0 में बारबरा के विशेषज्ञ, लेकिन 8.0 यह वास्तव में बहुत अधिक चीनी के साथ सिर्फ 7.0 ​​है।"
कॉनराड फ्रैक्स

7

यहाँ एक है बहुत : एक संबंधित अवधारणा के लिए कठोर परिभाषा अभिव्यक्ति , द्वारा
मैथिअस फेलाइसेन:

प्रोग्रामिंग लैंग्वेज की एक्सप्रेसिव पावर पर [पोस्टस्क्रिप्ट एकमात्र ऐसा मुक्त रूप था जिसे मैं पा सकता था।]

जावा भाषा और क्लोजर पर भी इस प्रविष्टि को देखें ।

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

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


5
+1: वाक्यगत शर्करा महत्वपूर्ण है। आधुनिक बीजीय संकेतन लैटिन गद्य के लिए सिंटैक्टिक चीनी है जो इसे प्रतिस्थापित करता है, लेकिन यह गणितीय रूप से तर्क करने की हमारी क्षमता में एक बड़ा बदलाव करता है।
केविन क्लाइन

3

मुझे लगता है कि शब्द वाक्यात्मक चीनी समान अंतर्निहित शब्दार्थ को व्यक्त करने के लिए एक वैकल्पिक वाक्यविन्यास इंगित करता है।

उदाहरण के लिए एक प्रोग्रामिंग भाषा को लें जिसमें एक ऑपरेशन होता है sumजो मनमानी लंबाई के पूर्णांकों की सूची जोड़ सकता है। इस भाषा में हम भाव लिख सकते हैं

sum []
sum [3, 4, 5, 1]
sum [2, 7]

जिनके परिणाम क्रमशः 0, 13 और 9 हैं।

अब, मान लीजिए कि हम महसूस करते हैं कि 90% बार हम sumदो तर्कों के साथ उपयोग करते हैं, और इसलिए हम सुविधा के लिए परिचय देते हैं, नया उद्धरण

2 + 7

जो के लिए सिर्फ कृत्रिम चीनी है sum [2, 7]

अब दूसरी भाषा B को लीजिए जिसमें कोई जोड़ नहीं है। हमारे पास ऑपरेटर हो सकते हैं <, जैसे =कि हमें संख्याओं की तुलना करने की अनुमति, लेकिन संख्याओं को जोड़ने का कोई तरीका नहीं । भाषा बी के रिलीज 2 में, हम सिंटैक्स के साथ एक नया अतिरिक्त संचालन शुरू करते हैं

2 + 7

जो हमेशा की तरह संख्या जोड़ता है।

भाषा ए के संदर्भ में, +संकेतन वाक्यगत चीनी है (यह एक वैकल्पिक, सरलीकृत और तदर्थ संकेतन है जिसका उपयोग sum [...]संकेतन के बजाय किया जा सकता है)। इसी तरह, जैसा कि हो लॉन्ग टैम के जवाब में बताया गया है, सी में अंकन के p->fieldलिए सिंटैक्टिक शुगर है (*p).field

भाषा B के संदर्भ में, +संकेतन चीनी नहीं है (यह राशि के संचालन के लिए उपयोग किया जाने वाला एकमात्र वैध वाक्य-विन्यास है)। इसी तरह, यदि सी केवल बिंदुओं के माध्यम से संरचनात्मक सदस्यों तक पहुंच सकता है और यदि अंकन नहीं था (*p).field, तो संकेतन p->fieldचीनी नहीं होगा।

मेरी राय में, वाक्यात्मक चीनी के बारे में कुछ गलतफहमी हैं जो प्रोग्रामिंग भाषा के शब्दार्थों के बारे में भ्रम की स्थिति का पता लगा सकती हैं। तर्क इस प्रकार है:

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

रीज़निंग की उपरोक्त लाइन "सिंटैक्टिक शुगर को ठीक से परिभाषित नहीं किया जा सकता है" जैसे सामान्य दावे की ओर जाता है, यह "स्वाद का मामला" है, या "हर प्रोग्रामिंग भाषा की सुविधा है, आखिरकार, सिंटैक्टिक शुगर"।

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

उदाहरण के लिए, ऑब्जेक्ट अंतर्निहित बिट कॉन्फ़िगरेशन और बिट ट्रांसफ़ॉर्मेशन के लिए सिंटैक्टिक चीनी नहीं हैं, वे एक निर्माण हैं जो डेटा और संचालन को मॉडल करने और कम्प्यूटेशन का वर्णन करने की अनुमति देता है। वस्तुओं, विधियों, विधि कॉलों के साथ कम्प्यूटिंग बाइट्स, प्रोसेसर रजिस्टरों, मेमोरी पतों (भले ही दो संगणनाओं का एक ही परिणाम हो, और यहां तक ​​कि अगर दूसरी संगणना का उपयोग पहले लागू करने के लिए किया जाए) के साथ कंप्यूटिंग के समान नहीं है।

मैंने यह वर्णन थोड़ा लंबा किया है, लेकिन मुझे लगता है कि यह एक महत्वपूर्ण पहलू है जिसे मैंने अन्य उत्तरों में संबोधित नहीं किया है।

नीचे की रेखा: वाक्य रचना चीनी एक निर्माण के लिए एक वैकल्पिक (संभवतः अधिक सुविधाजनक) वाक्यविन्यास है जो पहले से ही एक भाषा में है और पहले से ही एक अच्छी तरह से परिभाषित वाक्य रचना और शब्दार्थ है। नया वाक्यविन्यास (वाक्यविन्यास चीनी) मौजूदा एक से भिन्न होता है लेकिन एक ही शब्दार्थ होता है । यदि आप एक भाषा में एक नया निर्माण और इसके लिए नया वाक्यविन्यास पेश करते हैं, तो आपके पास वाक्यविन्यास चीनी नहीं है।


0

वाक्य-रचना चीनी एक ऐसी विशेषता है जो भाषा की अभिव्यक्ति को स्वयं विस्तारित नहीं करती है, इसलिए निरर्थक और कभी-कभी निरूपण का दुरुपयोग होता है, लेकिन यह दोनों लेखक के जीवन को सरल बनाता है और पाठक को अधिक अंतर्दृष्टि देता है।


0

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

प्रोग्रामर डिसिप्लिन की एक महत्वपूर्ण मात्रा के साथ कोई भी विशेषता जो केवल डी-सुगर हो सकती है, वह सिंथेटिक शुगर नहीं है। इसके सबसेट के रूप में, टाइप सेफ्टी बढ़ाने वाली कोई भी सुविधा सिंथैटिक शुगर नहीं है, क्योंकि प्रोग्रामर डिसिप्लिन के जरिए टाइप सेफ्टी को मैन्युअल रूप से लागू करना बेहद नॉन-ट्रिवियल है। उदाहरण के लिए, C ++ की ऑब्जेक्ट सिस्टम C पॉइंटर कास्ट पॉलीमोर्फिज्म के शीर्ष पर सिंथैटिक शुगर से अधिक है।

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

चीजें हैं जो का उदाहरण हैं वाक्यात्मक चीनी:

a[i] के बजाय *(a + i)

a -> b के बजाय (*a).b

foreach सिंटैक्स के बजाय मैन्युअल रूप से इटेरेटर सिंटैक्स टाइप करना।

सभी ऑपरेटर ओवरलोडिंग शुद्ध सिन्गनेटिक शुगर है।

क्या यह ध्वनि उचित और यथोचित असंदिग्ध परिभाषा की तरह लगती है?


3
संचालक अतिभार संश्लिष्ट शर्करा नहीं है। यह वही है जो C ++ को उन टेम्पलेटों के लिए सक्षम बनाता है जो मौलिक प्रकार (जैसे int) और मेरी अपनी कक्षाओं के लिए काम करते हैं।
केट ग्रेगरी

@ केटग्रेरी: यदि कोई स्वीकार करता है कि फ़ंक्शन ओवरलोडिंग सिंटैक्टिक चीनी नहीं है, तो ऑपरेटर ओवरलोडिंग को संकेतित मानों पर केवल अधिभार कार्यों को कॉल करने के लिए सिंटैक्टिक चीनी माना जा सकता है।
सुपरकैट

0

"सिन्सेटिक शुगर" कठोरता से परिभाषित शब्द नहीं है। आपके द्वारा पूछे जाने के आधार पर, आपको सबसे अधिक निम्नलिखित प्रकार की परिभाषाओं में से एक मिलेगा:

  1. कोई सच्चा स्कॉट्समैन दृष्टिकोण नहीं। मुझे जो चीजें पसंद हैं, वे वास्तविक प्रोग्रामिंग हैं, और जो चीजें मुझे पसंद नहीं हैं, वे सिंथेटिक चीनी हैं।
  2. MIPS के बाद सब कुछ सिंटैक्टिक शुगर था, और यहां तक ​​कि उन निर्देशों में से कुछ भी आवश्यक नहीं हैं।
  3. कहीं भी किसी के लिए प्रोग्रामिंग को आसान बनाने वाली कोई भी चीज उपयोगी नहीं होती है और न ही शकरयुक्त चीनी। चूँकि कोई विशेषता किसी भी परिस्थिति में उपयोगी नहीं पाई गई है, इसलिए इसे जोड़ा नहीं गया है, यह इस प्रकार है कि प्रत्येक मौजूदा सुविधा वाक्यगत शर्करा नहीं है। हाइपोथेटिकल विशेषताएं कृत्रिम शर्करा हो सकती हैं, जब तक कि कोई यह तय नहीं करता कि यह सुविधा उनके लिए उपयोगी है।

-3

मुझे कंप्यूटर विज्ञान के क्षेत्रों के बारे में निश्चित नहीं है, लेकिन तर्क के क्षेत्र में रूढ़िवादिता और परिभाषाओं को हटाने की अवधारणाएं हैं [ 1 ] एक ही नस में लगती हैं।

करी-हावर्ड पत्राचार को लागू करते हुए, कोई व्यक्ति "सिंटैक्टिक शुगर" के बारे में एक समानांतर अवधारणा के साथ आने में सक्षम हो सकता है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.