C ++ मानक ने अभिव्यक्ति टेम्पलेट क्यों नहीं अपनाया?


17

यह मेरी समझ है कि 1998 में मूल C ++ मानक से पहले एक तकनीक के रूप में अभिव्यक्ति टेम्पलेट्स को काफी खोजा गया था। वे कई मानक वर्गों जैसे std::stringऔर धाराओं के प्रदर्शन को बेहतर बनाने के लिए उपयोग क्यों नहीं किए गए थे ?


@ क्रिसहाइली: अगर मुझे इस तरह के बदलाव का सुझाव देने वाला एक प्रस्ताव प्रस्तुत करना था, तो यह पूरी तरह से एक समस्या होगी कि मुझे नहीं पता था कि यह पहली बार क्यों नहीं किया गया था, और यह बिल्कुल प्रासंगिक प्रोग्रामिंग है और उत्तर बहुत ही है विशिष्ट।
20-16 बजे डेडएमजी

स्ट्रिंग्स को गति देने के लिए आप वास्तव में एक्सप्रेशन टेम्पलेट के साथ क्या करेंगे?
jalf

5
@ जैलफ: यदि आप इसे लागू करने के लिए थे operator+, तो आप O(n)बार-बार आवंटन के लिए निरर्थक आवंटन प्राप्त कर सकते हैं , कुछ ऐसा जो अभी भी संदर्भों की तुलना में तेज है। इसके अलावा, आप उदाहरण के लिए गायन को लागू कर सकते हैं लेखन पर प्रतिलिपि बनाकर , न कि केवल "नॉन-कांस्ट में इंडेक्स पर"। ऐसे अन्य अनुप्रयोग भी हैं, जहाँ अभिव्यक्ति टेम्पलेट्स के साथ प्रदर्शन और शब्दार्थ दोनों को बेहतर बनाया जा सकता है।
डेडएमजी

मुझे पता है कि यह सवाल कुछ समय पहले पूछा गया था, लेकिन कृपया कुछ इस बारे में विस्तार से बताएं कि अभिव्यक्ति टेम्पलेट क्या हैं और / या प्रासंगिक सामग्री के लिए लिंक।
einpoklum

जवाबों:


17

अभिव्यक्ति टेम्प्लेट्स को पहली बार टॉड वेल्डुइज़न द्वारा जून 1995 में C ++ रिपोर्ट पत्रिका के एक लेख में प्रकाशित किया गया था। उस समय तक, मानक समिति एसटीएल को सी ++ मानक के साथ जोड़ने के लिए पहले से ही भारी थी , एक कार्य जो सभी अपने आप में मानक को एक या दो साल तक विलंबित करता है। (एसटीएल को 1993 में समिति के समक्ष प्रस्तुत किया गया था, और आधिकारिक तौर पर 1994 में प्रस्तावित किया गया था। मानक को पूरा करने में एक और चार साल लग गए।)
यह देखते हुए कि सी ++ मानकीकरण समिति स्वयंसेवकों का एक समूह है, उनमें से कुछ कंपनियों द्वारा भुगतान नहीं किया गया है। खर्च, मुझे नहीं लगता कि किसी के पास C ++ मानक में एक और विचार जोड़ने के लिए उपयोग करने के लिए कोई संसाधन था।

इसके अलावा, 1995 सिर्फ साल का है Veldhuizen लेख प्रकाशित किया गया था। तकनीक को ज्ञात और मान्यता प्राप्त होने के लिए , इसमें कुछ और साल लगेंगे । (एसटीएल का विचार 70 के दशक से शुरू होता है, 80 के दशक के अंत में एक Ada कार्यान्वयन किया गया था, C ++ कार्यान्वयन पर काम 1990 के आसपास शुरू हुआ होगा, और इस विचार को C ++ मानकीकरण का रास्ता खोजने में तीन साल लग गए। समिति।)
हालांकि, टॉड के लेख से सिर्फ तीन साल थे, जब तक कि मानक पर अंतिम मत नहीं था। यह एक बहुत ही कम समय था एक विचार को शामिल करने के लिए जो अभी भी नया था और मूल रूप से अप्रयुक्त था।

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


1
लेकिन std::stringऔर iostreams एसटीएल में नहीं थे।
आर। मार्टिनो फर्नांडीस

@ R.MartinhoFernandes: इसका मतलब यह नहीं है, हालांकि, समिति के पास कोई संसाधन नहीं था। (और इसे STL कंटेनर, BTW में बदलने के लिए बदल दिया std::string गया था ।)
sbi

2
मुझे लगता है कि मुझे अभी इसे लिंक करना है: क्या std :: STL का हिस्सा है?
Xeo

@sbi आह, यह समझ में आता है।
आर। मार्टिनो फर्नांडीस

10

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

मानक पुस्तकालय पहले से ही है std::valarrayऔर परिवार जिसका उद्देश्य कार्यान्वयन की अभिव्यक्ति टेम्पलेट शैली का समर्थन करना है। जहाँ तक मैं बता सकता हूँ यह काफी कटौती नहीं करता है, यद्यपि। एक समस्या जिसके कारण यह है कि जिन लोगों ने इसके आधे-पके हुए संस्करण को प्राप्त करने की पैरवी की थी, उन्हें मानक में शामिल करना बंद कर दिया गया था, जिसमें यह शामिल था। इसे बचाने की कोशिशें हुईं (जैसे डेविड वंदेवोर्डे, मैट ऑस्टर्न, और मैंने स्टॉकहोम मीटिंग में एक या एक दिन के लिए इस पर काम किया) लेकिन अंत में किसी ने भी दिलचस्पी नहीं दिखाई।


8
आप थोड़ा अनुचित शुरू करते हैं, क्योंकि डेडएमजी इस बात की पैरवी नहीं कर सकता है कि साधारण तथ्य के कारण वह अपने डायपर को बमुश्किल वापस ले आया था और शायद उस बिंदु तक नहीं पहुंचा था जहां वह "सी ++" का ठीक से उच्चारण कर सके। :)
sbi

7
बहुत अफसोस है कि एक बच्चा के रूप में, मुझे पैरवी नहीं मिली: पी
डेडएमजीन

1
मुझे एहसास है कि हर किसी को मानक को प्रभावित करने का अवसर नहीं था। यद्यपि मैं नियमित रूप से लगभग 15 वर्षों से समिति की बैठकों में भाग लेता हूं, लेकिन मानक पर मेरा प्रभाव सीमित है। हालाँकि, मेरी बात यह है: यदि कोई मानक में कुछ चाहता है तो उन्हें प्रयास करने की आवश्यकता है! अन्य प्राथमिकताओं वाले लोगों के लिए अनिवार्य रूप से नीचे की चीजें नहीं हैं, चाहे वे तकनीकी हों या अन्यथा (जैसे पूरी तरह से बड़े होने पर ध्यान केंद्रित करना)।
डायटमार कुहल २५'२२

अभिव्यक्ति टेम्पलेट्स पर वेलार्रे ठिकानों के libgcc कार्यान्वयन।
10

3

इस तकनीक को अब "अभिव्यक्ति टेम्पलेट्स" के रूप में जाना जाता है (स्वतंत्र रूप से) टॉड वेल्डुइज़न और खुद दोनों द्वारा 1994 के रूप में कम से कम वापस खोजा गया था (टॉड का लेख 1995 से है, लेकिन सामान प्रकाशित होने में थोड़ा समय लगता है; मेरा अपना) पहली बार comp.lang.c ++ में दिखाया गया था)।

मैंने वास्तव में इस मुद्दे के कारण C ++ समिति की बैठकों में भाग लेना शुरू कर दिया। मैंने मार्च 1996 में पहली सांताक्रूज बैठक में समिति के लिए तकनीक और std :: valarray की एक पूर्ण पुनर्निर्धारण प्रस्तुत की। यह बहुत बड़ा बदलाव माना गया था, लेकिन जैसा कि डायटमार ने बताया, हमें बाद के मीटीन में कुछ शब्द मिले। स्टॉकहोम में जो std :: valarrray के कार्यान्वयन के लिए अभिव्यक्ति टेम्पलेट्स के उपयोग को सक्षम करता है। मेरे आश्चर्य के लिए, वे शब्द अभी भी वहां हैं: http://wg21.link/N4727 में उप-अनुच्छेद [valarray.syn] 29.7.1 का पैराग्राफ 3-6 देखें ।


1
आश्चर्य है कि वास्तविक URL के बजाय लिंक शॉर्टनर का उपयोग करने की बात क्या है
gnat

3
@gnat: यदि आप एक दस्तावेज़ संख्या जानते हैं, तो इसके लिए wg21.link URL लिखना तुच्छ है। यही मैंने यहां किया। यह मुझे उस विशेष मेलिंग / वर्ष को देखने से बचाता है जो एक दस्तावेज़ में जारी किया गया था। इसके अलावा, मैं उम्मीद कर रहा हूं कि यदि / जब WG21 होस्टिंग URL को स्थानांतरित करने का निर्णय लेता है, तो wg21.link तदनुसार अपडेट किया जाएगा, इस प्रकार बासी संदर्भों से बचा जा सकता है। (यानी, बिंदु छोटा नहीं है, लेकिन पठनीयता है।)
डेवेड वी।

0

मेरा सबसे अच्छा अनुमान है कि कोई भी कंपाइलर 1998 में वापस एक्सप्रेशन टेम्प्लेट संकलित नहीं कर पाया होगा।


1
टॉड वेल्डुइज़न ने KAI के C ++ कंपाइलर का उपयोग करते हुए 1996 से पहले अपनी अभिव्यक्ति का खाका तैयार किया। इसका कारण बहुत अधिक अपवित्र है ...

1
C ++ समुदाय का एक बड़ा प्रतिशत 2003 तक एसटीएल का उपयोग करने में सक्षम नहीं था (या तो मैं आपको, Microsoft!
sbi

2
दरअसल, bth Todd और I को मूल रूप से बोरलैंड C ++ 4 कंपाइलर (जो 1993 में जारी किया गया था) पर काम करने के लिए एक्सप्रेशन टेम्प्लेट तकनीक मिली थी। संयोग से, मेरा मानना ​​है कि यह पहला कंपाइलर भी है जिस पर एसटीएल को पूरी तरह से काम करने के लिए बनाया गया था। मैंने बाद में विभिन्न प्रकार के अन्य संकलकों के लिए एक अभिव्यक्ति टेम्पलेट लाइब्रेरी को पोर्ट किया (उस समय Sun के Cfront- आधारित संकलक सहित)। थोड़ी देर बाद KAI C ++ कंपाइलर कैम।
डेवेड वी।

@DaveedV। BCC4 अपने समय के लिए बहुत अच्छा संकलक था और उस समय के VC संस्करण से बहुत बेहतर था! यह कुछ quirks था, हालांकि, कुख्यात "स्माइली बग" की तरह। :->इसके अलावा वे इसे तेजी से सुधारने में विफल रहे, इसलिए यह तेजी से बेहतर हो गया और इसके साथ तेजी से सुधारने वाली तकनीकों का उपयोग करना कठिन हो गया। जब VC7.1 जारी किया गया था और बहुत अधिक अनुपालन था, तो उसने बोरलैंड को मार दिया।
sbi
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.