C ++ में, SFINAE और मेटाप्रोग्रामिंग जानबूझकर या केवल टेम्पलेट्स का एक उपोत्पाद थे?


11

SFINAE और templateमेटाप्रोग्रामिंग अद्भुत चीजें कर सकते हैं और कई पुस्तकालय भी इनका काफी उपयोग करते हैं।

ऐतिहासिक रूप से इन दोनों "जादू अवधारणाओं" को C ++ में जानबूझकर पेश / समर्थित किया गया था? या उन्हें बाद में मूल templateप्रोग्रामिंग के उपयोगी बायप्रोडक्ट्स (साइड उत्पाद) के रूप में खोजा गया था ?

जवाबों:


19

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

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

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

मुझे याद है कि मैंने विशेष रूप से उन्हें ब्रेज़न स्ट्रॉस्ट्रुप की कार्यक्रम के बारे में प्रतिक्रिया के बारे में पूछा था, और जवाब में इरविन ने अपने हाथों से अपनी आँखों को ढँक कर उनकी नकल की। :)

मुझे लगता है मैं टोड Veldhuizen , जो भी उस सम्मेलन में था, कैसे वह अभिव्यक्ति टेम्पलेट्स के साथ आया था, पर खेद नहीं है । (वह निश्चित रूप से बात करने के लिए एक अच्छा अध्याय था।) लेकिन मैं उम्र में बहुत छोटा था, और जीवन-समय के अवसर को कम कर देता हूं।:(


+1, दिलचस्प अनुभव। क्या उन्होंने SFINAE के बारे में कुछ भी बात की थी?
इमिलिंद

@iammilind: मुझे लगता है कि SFINAE केवल उन विशेषताओं में से एक है जिसका उल्लेख उन्होंने एसटीएल को बेहतर समर्थन देने के लिए किया था, हालांकि "SFINAE" मॉनीकर को इसके वर्षों बाद ही गढ़ा गया था।
sbi

11

1994 में सी ++ मानकीकरण समिति की एक बैठक के दौरान, ई। अन्रुह ने पाया कि संकलन समय पर कुछ गणना करने के लिए टेम्पलेट्स का उपयोग किया जा सकता है। उन्होंने एक प्रोग्राम लिखा, जो प्राइम नंबर को प्रिंट करता है। इस अभ्यास का पेचीदा हिस्सा यह था कि अभाज्य संख्याओं का उत्पादन संकलक प्रक्रिया के दौरान संकलक द्वारा किया जाता था न कि रन टाइम पर। हालाँकि यह कार्यक्रम पूरी तरह से पोर्टेबल नहीं था, फिर भी कार्यक्रम ने दिखाया कि टेम्पलेट इंस्टेंटेशन तंत्र एक आदिम पुनरावर्ती भाषा है जो संकलन समय पर गैर-तुच्छ गणना कर सकती है।

यह उद्धरण वन्देवोर्डे और जोसुटिस (अध्याय 17) द्वारा "c ++ टेम्पलेट" से लिया गया है।

जैसा कि आप देख सकते हैं, इसे जल्दी खोजा गया था और इसकी शक्ति को तुरंत पहचान लिया गया था।


2
अच्छा था। इस तरह का लेख मैंने इंटरनेट पर भी पढ़ा है, स्रोत याद नहीं है। क्या यह SFINAE के लिए भी सही है?
इमिलिंड

@iammilind "क्या आप SFINAE के लिए भी सच है?"
B:овиЈ

1
SFINAE को आम तौर पर कंपाइलर से कुछ समर्थन की आवश्यकता होती है। तो यह संभव है कि, यह गलती से खोजा नहीं गया हो सकता है।
इमिलिंड

: @iammilind मैं एक InformIT के लेख किताब से एक ऐसी ही पाठ है कि पाया informit.com/articles/article.aspx?p=30667&seqNum=8
BЈовић

@iammilind ने उत्तर संपादित किया। मैं कहूंगा कि यह आकस्मिक रूप से था, क्योंकि टेम्पलेट्स के लिए संकलक समर्थन सीमित था। यह कार्यक्रम पोर्टेबल नहीं था, और मुझे लगता है कि इसने केवल एक कंपाइलर पर काम किया
BЈовић
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.