C ++ अपनी अवधारणा के कार्यान्वयन के लिए D के दृष्टिकोण को क्यों नहीं अपना सकता है?


19

जैसा कि आप में से बहुत से लोग जानते हैं, टेम्प्लेट तर्क के लिए संभावित प्रकारों को बाध्य करने के लिए अवधारणाओं , C ++ का दृष्टिकोण C ++ 11 में शामिल होने में विफल रहा है।

मैंने सीखा कि डी प्रोग्रामिंग भाषा 2.0 में इसकी जेनेरिक प्रोग्रामिंग के लिए एक समान विशेषता है। इसका समाधान मुझे काफी सुरुचिपूर्ण और सरल लगता है।

तो मेरा सवाल यह है कि C ++ एक समान दृष्टिकोण का उपयोग क्यों नहीं कर सकता है

  • C ++ कॉन्सेप्ट का लक्ष्य डी के कार्यान्वयन से क्या बड़ा हो सकता है?
  • या C ++ की विरासत इसे इस तरह के दृष्टिकोण को अपनाने से रोकती है?
  • या कोई और?

आपके उत्तर के लिए धन्यवाद।

PS डी की सामान्य प्रोग्रामिंग शक्ति के कुछ उदाहरण देखने के लिए, कृपया इसे देखें: /programming/7300298/metaprogramming-in-c-and-in-d/7303534#7303534


2
इस सवाल को प्रोग्रामर के पास भेजना चाहिए था। (मैंने उसके लिए मतदान किया, लेकिन 3 वोट "रचनात्मक नहीं" के लिए थे)।
.मिलिंद

3
मुझे लगता है कि सवाल सबसे रचनात्मक तरीके से नहीं लिखा जा सकता है, लेकिन इस पर मूल्य है। मैं किसी को यह समझाता हूं कि डी कैसे अवधारणाओं का प्रबंधन करता है, और दो मुख्य दृष्टिकोणों के साथ इसकी तुलना करने में सक्षम हो सकता है कि सी ++ समिति ने अवधारणाओं को लिया इससे पहले कि उन्होंने पूरी तरह से सुविधा को स्थगित करने का फैसला किया ... यदि इसे बंद करना है, तो इसे करना चाहिए बहुत कम से कम प्रोग्रामर
डेविड रॉड्रिग्ज - ड्रिबेसा

2
@ डेविड: मैंने फिर से वोट दिया (और फिर शायद, इसे प्रोग्रामर साइट पर ले जाया जा सकता है)
नवाज

1
डेविड से सहमत हूँ। मैं पहले से ही "गैर रचनात्मक" कहने का कोई कारण नहीं देखता, इससे पहले कि कोई भी कुछ बनाने की कोशिश कर सकता है। 0 उत्तरों के साथ, "रचनात्मकता" 0/0 है इसलिए अनिश्चित है।
एमिलियो गरवाग्लिया

1
@ jj1: क्या आप हम में से उन लोगों के लिए डी के दृष्टिकोण पर एक छोटी व्याख्या प्रदान कर सकते हैं जो भाषा नहीं जानते हैं?
डेविड रॉड्रिग्ज - dribeas

जवाबों:


9

C ++ का मानक एक मानक दस्तावेज है, जो नियमों को निर्धारित करता है जो कि भविष्य के दस्तावेजों में रहेगा (ज्यादातर अप्रभावित)। इसलिए समिति ने अपने अपडेट के संबंध में बहुत सतर्क रुख अपनाया है।

मानक पुस्तकालय के अतिरिक्त कुछ हद तक आसान थे। कई पुस्तकालय लंबे समय से बूस्ट में थे: यह साबित हो गया था कि उन्होंने काम किया था।

भाषा में मुख्य अवधारणाओं के अतिरिक्त इसके साथ प्रयोग करना अधिक कठिन है, क्योंकि इसके लिए पहले एक संकलक को संशोधित करना आवश्यक है। संकलक के बिना एक C ++ 03 सुविधा (टेम्पलेट्स का निर्यात) निर्दिष्ट किया गया था ... परिणाम भयानक था। EDG कंपाइलर फ्रंटेंड के कार्यान्वयनकर्ताओं ने इसे बहुत कम लाभ के लिए एक बड़े पैमाने पर कार्य (कई आदमी वर्ष) के रूप में रिपोर्ट किया। किसी अन्य कंपाइलर ने कभी इसे लागू करने की कोशिश नहीं की। यह आरामदायक स्थिति नहीं है।

विशेषताएं पसंद constexprया static_assertआसान थे (और पहले से ही पुस्तकालयों ने अपनाया)। लैम्ब्डा काफी अच्छी तरह से समझा जाता है और कई अन्य भाषाओं में लागू किया जाता है, पहले से ही व्यापक शोध किया गया है, इसलिए यह मुख्य रूप से वाक्य रचना का विषय था।

दूसरी ओर कॉन्सेप्ट को बहुत नए और अनछुए माना गया । वे मुश्किल से समय में निर्दिष्ट थे, अवधारणा का कोई सबूत नहीं था ... और इस तरह उन्हें खारिज कर दिया गया था, बजाय उनके लिए प्रतीक्षा करने (या गलती करने) के।

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

FYI करें: वर्तमान में इस प्रयोग को समर्पित Clang की एक शाखा है, जिसका नेतृत्व इंडियाना विश्वविद्यालय के Larisse Voufo ने किया है।


मामूली टिप्पणी: निर्यात कीवर्ड वास्तव में एक c ++ 98 सुविधा (मूल मानकीकरण) था। 2003 के गलियारे ने मुख्य रूप से पुस्तकालय की विशेषताओं को संबोधित किया।
ex0du5

@ ex0du5: ठीक है, '03 C ++ 98 स्टैंडर्ड का एक मामूली संशोधन है, जिसमें ज्यादातर सुधारों की चिंता है।
Matthieu M.

3

2011 के मानक के लिए, C ++ कॉन्सेप्ट्स पर काम किया जा रहा था, और वे अंततः उस मानक से हटा दिए गए थे, क्योंकि वे पर्याप्त नहीं थे। " C ++ अवधारणाओं पर काम जारी है जो उन्हें अगले मानक में लाने के लिए नेतृत्व कर सकता है। हालांकि, यह हो सकता है कि कुछ लोग अगले मानक के प्रस्ताव पर काम करेंगे, जो डी के टेम्पलेट की बाधाओं के समान है। ऐसा होता है या नहीं देखा जाना बाकी है। जहां तक ​​मुझे पता है, 2011 के मानक के लिए ऐसा कोई प्रस्ताव नहीं था, इसलिए इसकी योग्यता के बिना इसे उस मानक में बनाने का कोई मौका नहीं था, लेकिन अगले मानक में क्या होगा या नहीं यह पूरी तरह से अज्ञात है इस समय।

मुझे किसी भी बड़े कारण के बारे में पता नहीं है कि डी के टेम्प्लेट की बाधाओं के समान कुछ सी + + के लिए क्यों लागू नहीं किया जा सकता है, हालांकि यह देखते हुए कि सी ++ आमतौर पर संकलन के समय क्या कर सकता है में अधिक सीमित है, यह उन्हें काफी काम करने के लिए कठिन हो सकता है साथ ही वे डी में करते हैं (हालांकि सामान की तरह परिचय constexprनिश्चित रूप से मदद करता है)।

तो वास्तव में, मुझे लगता है कि संक्षिप्त उत्तर यह है कि कोई तकनीकी कारण नहीं है कि डी के टेम्पलेट बाधाओं के समान कुछ सी ++ में क्यों नहीं हो सकता है।

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


2

आपका मतलब है D का टेम्पलेट बाधा?

जहाँ तक मुझे पता है, C ++ कॉन्सेप्ट्स को बढ़ावा देने के लिए प्रस्तावित किया गया था :: कॉन्सेप्ट। यहाँ समस्या यह है कि बढ़ावा C ++ 03 के लिए लिखी गई एक लाइब्रेरी है। C ++ 11 में अन्य वाक्यविन्यास क्षमताएं हैं जो कुछ चीजों को एक अलग तरीके से लागू करने की अनुमति देती हैं C ++ 03 अनुमति देता है (इसलिए, खुद को नए सिंटैक्स के फायदे लेने के लिए फिर से लिखा जा सकता है)।

मानक समिति ने अवधारणाओं को गिरा दिया क्योंकि उन्हें निर्दिष्ट करने में बहुत लंबा समय लगा होगा (इस प्रकार फिर से c ++ 11 अनुमोदन में देरी)। वे शायद अगले सी ++ रिलीज में जाएंगे।

इस बीच, डी सिंटैक्स अलग है तो सी ++ और डी ही संकलन समय पर कुछ अभिव्यक्ति मूल्यांकन क्षमताओं को बनाए रखते हैं सी ++ हमेशा कुछ विरासत कोड को तोड़ने के बिना नहीं हो सकता है (कुछ ऐसा नहीं है, जिसमें यह एक छोटा इतिहास हो)। C ++ ही अब है static_assertऔर costexpr, यह संकलन समय मूल्यांकन क्षमताओं में सुधार करने की अनुमति देता है। भविष्य में हो सकता है कि समान स्तर पर पहुंच जाए।


2

यहाँ हर्ब सटर के साथ एक क्यूए है, वह 15 मिनट के निशान पर अवधारणाओं के बारे में बात करता है।

http://channel9.msdn.com/Shows/Going+Deep/Herb-Sutter-C-Questions-and-Answers

यदि आप इसे पसंद करते हैं, तो यहां एक और है: http://channel9.msdn.com/Shows/Going+Deep/Conversation-with-Herb-Sutter-Perspectives-on-Modern -C0x11

अब आपके प्रश्न के अनुसार। डी संस्करण क्यों नहीं? वैसे इसका उपयोग क्यों करें? C ++ बहुत ही जटिल और स्थिर भाषा है। प्रत्येक सुविधा को अत्यंत सावधानी से चुने जाने की आवश्यकता है, क्योंकि इसे आमतौर पर दशकों तक समर्थन करना पड़ता है। यदि आप पहले C ++ मानक को देखते हैं और संशोधन का पालन करते हैं, तो कुछ पदावनत सुविधाएँ हैं, लेकिन फिर भी उन्हें अभी भी समर्थित होना चाहिए। तो यह 100% फिट C ++ के लिए अवधारणाओं को डिजाइन करने के लिए समझ में आता है।

यह C ++ 0x में शामिल क्यों नहीं किया गया था। खैर क्योंकि यह बहुत बड़ा था। प्रस्ताव 100 पृष्ठों लंबा था और लागू करने के लिए बहुत कठिन था। यह तय किया गया था कि इस सुविधा को परिपक्व होने तक अधिक समय की आवश्यकता है जब तक कि इसे मानक में शामिल नहीं किया जाता है।


2

काफी बस, C ++ के पास D. की तुलना में बहुत अधिक ऐतिहासिक सामान का एक नरक है। यह बहुत आसान होगा कि बहुत सी चीजों को लागू किया जाए यदि यह इस तथ्य के लिए नहीं था कि C ++ में भारी मात्रा में ऐतिहासिक कोड है जो सही ढंग से काम करना जारी रखना चाहिए। और उम्मीद के मुताबिक। D में यह समस्या नहीं है।


हो सकता है कि आपने सिर्फ यह गलत किया हो, लेकिन मुद्दा विरासत कोड नहीं है, मुद्दा यह है कि कोई भी नया फीचर दशकों तक भाषा में मौजूद रहेगा और उसका समर्थन करना होगा। इसका मतलब है कि प्रत्येक नई सुविधा को बहुत सावधानी से चुना जाना है।
Let_Me_Be

@Let_Me_Be: सही है, समस्या विरासत कोड में है यदि हम अवधारणाओं में फेंकते हैं तो हम लाइन से दस साल नीचे होंगे।
डेविड थोरले
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.