2009-09-07 18 views
11

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

एक स्तर पर, ये परिवर्धन स्वयं को स्पष्ट विशेषताओं और संवर्द्धन की तरह महसूस करते हैं। एक और स्तर पर, वे "सिंटेक्टिक चीनी" की स्थिति से मामूली अपग्रेड की तरह महसूस करते हैं।

इस विचार आगे ले करने के लिए, पर विचार (मैं कुछ जानकारी गलत है, लेकिन बात बनी हुई है):

transistor 
elementary logic gate 
compound gate 
    |   | 
ALU flip-flop 
    | |  | 
    | register RAM 
    | | 
    CPU 
    microcode 
    assembly 
    C 
    C++ 
    | | 
MSIL JavaScript 
C# jQuery 

कई बार, अमूर्त के किसी भी एकल परत वाक्यात्मक चीनी लेकिन की कई परतों की तरह एक बहुत लग रहा है पृथक्करण एक दूसरे से बहुत दूर महसूस किया जाता है।

आपको कैसे पता चलेगा कि कुछ सिंटैक्टिक चीनी होने के बाद बंद हो गया है और बनना शुरू हुआ सुविधा?

+1

क्या आप भाषा-डिजाइन का संदर्भ लेते हैं? 'कुछ' के साथ आपका क्या मतलब है? – Dario

+1

मूल रूप से व्यक्तिपरक, मुझे लगता है। – dmckee

उत्तर

23

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

आप सही कह रहे हैं जब वस्तुएं वास्तव में विधियों और विरासत के साथ संरचित structs हैं। हालांकि, यह केवल कार्यान्वयन विस्तार है। क्या वस्तुओं को एक अलग तरीके से सोचने की अनुमति है। वस्तुओं के बारे में सोचते समय आप असली दुनिया की इकाइयों से अधिक आसानी से संबंधित हो सकते हैं। वही बात तब हुई जब समय पर और भी आगे, हम प्रक्रिया-प्रक्रिया के लिए जाने-जाने के लिए कूद गए। हुड के तहत, प्रोसेसर अभी भी ओपी से ओपी तक jmp'ing पर रहता है, लेकिन हम एक अलग, अधिक काले-बॉक्स, रास्ते में सोच सकते हैं।

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

+1

मैंने पिछले कुछ महीनों में आपके उत्तर के बारे में कई बार सोचा है और जितना अधिक मैं इसे परिस्थितियों पर लागू करता हूं, उतना ही मैं इसके साथ सहमत हूं। – Dinah

2

मुझे यह कहना होगा कि उसी परिणाम को सिंटैक्टिकल चीनी का उपयोग करने के समान प्रकार के "समय-बाधा" के साथ, अलग-अलग कोड लिखकर हासिल नहीं किया जा सकता है।

मेरे उदाहरण एक लैम्ब्डा अभिव्यक्ति हो सकता है, एक foreach पाश लिख प्रयास का एक बहुत ले नहीं है, लेकिन यकीन है कि .Foreach() भी अच्छा है का उपयोग करते हुए; बनाम पूरे HttpRequest कक्षा को अपने आप लिखना। एक वाक्य रचनात्मक है, एक विशेषता है। दोनों समय बचाते हैं, एक दूसरे की तुलना में एक बहुत बड़ा तरीका है।

5

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

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

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

12

सिंटेक्टिक चीनी एक सुविधा है।

+2

व्यापक रूप से, हां। लेकिन मुझे नहीं लगता कि आपने ओपी के सवाल की भावना में जवाब दिया था। – nawfal

0

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

2

"वाक्यात्मक चीनी" आप

+3

शब्द की मेरी समझ से नहीं। Syntactic चीनी भाषा * मीठा * बनाता है। –

+2

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

5

जब परिवर्तन मूल्य प्रदान करता है? मैंने असेंबलर में कोड किया है। मैं सी के लिए स्विच किया और संकलक से आउटपुट देखा। यह कोड 95 +% उतना अच्छा था जितना मेरे हाथ से तैयार किए गए असेंबलर और लिखना बहुत आसान था। मेरे लिए जो मूल्य प्रदान करता है, इसलिए मैं कहूंगा कि यह चीनी नहीं था।

सी ++ मुझे मेरे ऑब्जेक्ट उन्मुख विचारों को कोड में अनुवाद करने में मदद करता है। जब तक ओवरहेड बहुत अधिक नहीं होता है तो मुझे लगता है कि यह एक विशेषता है।

मैं एक व्यावहारिक प्रकार हूं। "मैं यह मूल्यवान है देख सकते हैं" मेरा उत्तर

है
0

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

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

3

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

दूसरी ओर, स्ट्रिंग्स पर काम कर रहे प्लस ऑपरेटर वास्तव में स्ट्रिंगबिल्डर का उपयोग करने और संलग्न करने के लिए वाक्य रचनात्मक चीनी है।

1

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

कुछ संरचनाओं को संवैधानिक चीनी के रूप में माना जा सकता है। उदाहरण के लिए, वीबीएनईटी में, कोड के लिए परीक्षण करने के लिए कोड दो संदर्भों के बराबर नहीं किया गया था, If Not (ref1 Is Ref2) की आवश्यकता है लेकिन भाषा के नए संस्करण If ref1 IsNot Ref2 की अनुमति देते हैं। नए वाक्यविन्यास में कुछ भी व्यक्त नहीं किया जा सकता है जिसे पुराने में व्यक्त नहीं किया जा सकता है, लेकिन नया वाक्यविन्यास क्लीनर है, कोई अस्पष्टता नहीं पेश करता है, और इसका उपयोग करने का एकमात्र कारण यह नहीं होगा कि कोड पुराने संस्करणों के साथ वापस संगत हो भाषा का

कुछ संरचनाएं चीनी के रूप में परिभाषित करने के लिए थोड़ा कठिन हो सकती हैं। विशेष रूप से, यदि कोई भाषा संरचनाएं जोड़ती है जो अन्य प्रकारों के साथ उपयोग किए जाने पर मौजूदा निर्माण के समान काम करती हैं, लेकिन दूसरों के साथ संकलन विफल हो जाएंगी, तो ऐसी संरचना संकलन-समय प्रकार सत्यापन का माध्यम प्रदान कर सकती है जो पहले मौजूद नहीं थी। जावा जेनरिक आमतौर पर इस प्रकाश में देखा जा सकता है।कोई CatArrayList<Cat> पर आसानी से ArrayList तक जोड़ सकता है; ArrayList<Cat> जोड़ता है संकलन समय पर Dog एस को अस्वीकार करने के लिए एक गार्ड है। चूंकि संकलन-समय की बाधाओं में से कोई भी ऐसा प्रोग्राम लिखने की अनुमति नहीं देता है जो उनके बिना नहीं लिखा जा सकता है, कुछ लोग उन्हें वाक्य रचनात्मक चीनी के रूप में देख सकते हैं। दूसरी ओर, भले ही टाइप सत्यापन के बजाए संकलन-समय पर टाइप सत्यापन किया जाता है, फिर भी इसे किसी प्रोग्राम की नौकरियों में से एक के रूप में देखा जा सकता है।

संबंधित मुद्दे