2010-12-28 8 views
9

अक्सर मैंने कुछ सी ++ सुविधाओं को काटकर कुछ पुराने/पुराने/विदेशी सी ++ कंपाइलर्स के अनुपालन के लिए पढ़ा।क्या सी ++ (98/03) विशेषताएं खराब कंपेलरों द्वारा समर्थित नहीं हैं?

This one अभी पिछले एक मैं चढ़ गया है: Box2D नामस्थान का उपयोग नहीं कर रहा है क्योंकि वे समर्थन करने की आवश्यकता:

गरीब सी ++ compilers जहां नाम स्थान समर्थन धब्बेदार हो सकता है

एक बड़ा उदाहरण मैं क्यूटी के बारे में सोच सकता हूं, जो एमओसी पर निर्भर है, टेम्पलेट उपयोग को बहुत सीमित कर रहा है और टेम्पलेट से परहेज कर रहा है (ठीक है, यह क्यूटी 3 और पिछले संस्करणों के लिए कम से कम सच है, क्यूटी 4 ज्यादातर अपने सम्मेलनों को बनाए रखने के लिए कर रहा है)।


मुझे आश्चर्य है कि कौन से कंपेलर गरीब हैं?
वहां lots of C++ compilers हैं (मैंने उनमें से अधिकांश के बारे में कभी नहीं सुना है), लेकिन मुझे आशा है कि वे सभी सबसे आम (/ सरल?) सी ++ सुविधाओं जैसे नामस्थान (जब तक वे मर नहीं जाते) का समर्थन कर रहे हैं; क्या यह मामला नहीं है?

सबसे असमर्थित विशेषताएं क्या हैं?
मैं बाहरी टेम्पलेट्स, शायद टेम्पलेट आंशिक विशेषज्ञता और इसी तरह की विशेषताओं की कमी की आसानी से उम्मीद कर सकता हूं। आरटीटीआई या अपवादों में भी, लेकिन मुझे कभी भी नामस्थानों पर संदेह नहीं होता।

+2

हम्म। बॉक्स 2 डी ने जाहिर तौर पर 2006 की शुरुआत में "जीवन शुरू किया"। यह नामस्थान से बचने के लिए देर से लगता है। लेकिन Qt3 उस समय से है जब कोई सभ्य विंडोज सी ++ कंपाइलर नहीं था, और इसकी गति इसे तब से ले गई है। – aschepler

+2

कोई यह नोट कर सकता है कि क्यूटी के एमओसी (मेटा ऑब्जेक्ट कंपाइलर) में वास्तव में कोई सी ++ सुविधा या अन्य के साथ कुछ नहीं है या नहीं। मैंने हमेशा इसे एक (उपयोगी) ऐड-ऑन सुविधा के रूप में देखा जो शुद्ध सी ++ के माध्यम से अपने फीचर सेट को कार्यान्वित करने की कोशिश करने से क्यूटी सरल के साथ प्रोग्रामिंग करता है। –

+0

@ मार्टिन: जहां तक ​​मुझे सी ++ 03 के साथ पता है, लगभग सभी एमओसी का उपयोग करने के लिए अपेक्षाकृत सरल है, विशेष रूप से सिग्नल/स्लॉट तंत्र (boost.signal देखें) जो मुझे लगता है कि एमओसी के लिए सबसे महत्वपूर्ण विशेषता है बनाया गया है – peoro

उत्तर

8

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

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

कोई अन्य जो उस विशेष कंपाइलर (STILL!) द्वारा समर्थित नहीं है, व्युत्पन्न प्रकार पॉइंटर्स को एमआई का उपयोग करते समय लौटाए गए मूल संस्करण के प्रकारों को वापस करने के लिए वर्चुअल फ़ंक्शन ओवरलोड कर रहा है। वीसी सिर्फ सादे फिक्र आउट हो जाते हैं और आप मानक व्यवहार को दोहराने के लिए virtual_xxx() और गैर वर्चुअल "xxx()" फ़ंक्शंस प्रदान करते हैं।

+0

एर ... सेंचुरी थोड़ा मजबूत है क्योंकि भाषा स्वयं एक शताब्दी पुरानी नहीं है: पी लेकिन +1। (और 20 दशकों? मैं 200 साल से अधिक उम्र के किसी को भी नहीं जानता ...) –

+3

@ बिली: हालांकि, पिछली शताब्दी में भाषा का मानकीकरण किया गया था। – sbi

+0

@ एसबीआई: आह ... अब मैं देखता हूं। ठीक। –

0

क्यूटी टेम्पलेट्स का अधिक उपयोग नहीं करता क्योंकि यह टेम्पलेट्स से पुराना है।

+0

यह सच है, लेकिन यह वास्तव में सवाल का जवाब नहीं देता है। –

+0

यह शायद प्रश्न के लिए एक टिप्पणी होनी चाहिए। – sbi

+4

क्यूटी के मुकाबले ज्यादा समस्याएं हैं। एक Q_OBJECT वर्ग टेम्पलेट नहीं हो सकता है, एमओसी उल्टी हो जाएगी। क्यूटी के साथ सबसे बड़ी समस्याओं में से एक, अन्यथा महान पुस्तकालय, "एक्सटेंशन" का उपयोग है जो वास्तव में सी ++ को पायथन में बदलने के लिए भाषा को तोड़ देता है। –

2

मूल रूप से कुछ भी जो सी ++ 98 में मानकीकरण प्रक्रिया के हिस्से के रूप में जोड़ा गया था। यही कारण है:

  • टेम्पलेट (सिर्फ आंशिक विशेषज्ञता - मैं सभी टेम्पलेट्स मतलब) -
  • अपवाद (वे अक्सर माइक्रोकंट्रोलर्स जैसी चीजों पर उपलब्ध नहीं हैं अक्सर क्योंकि इसमें एक क्रम समर्थन/भूमि के ऊपर)
  • नेमस्पेस
  • RTTI

आप यहां तक ​​कि पुराने जाना हैं, तो आप जोड़ सकते हैं

  • मानक पुस्तकालय में सबसे अधिक सब कुछ।

कई पुराने कंपाइलर्स केवल सादे खराब हैं; ओटीओएच मैं दृढ़ता से उनके बारे में चिंता करने की सिफारिश नहीं करता। पहले से ही कई अच्छे और स्वतंत्र रूप से उपलब्ध उचित मानकों के अनुरूप संकलक उपलब्ध हैं जिनके बारे में मुझे पता है (ज्यादातर जी ++ के माध्यम से)।

+2

नरक, वास्तव में? कौन से कंपाइलर्स आजकल नामस्थान, टेम्पलेट्स और छोटे आरटीटीआई सी ++ का सही ढंग से समर्थन नहीं करते हैं ?? क्या कंपाइलर्स की उस सूची में _anything_ प्रासंगिक है? मुझे गंभीरता से संदेह है। – sbi

+0

@ एसबीआई: मैं मान रहा था कि ओपी पुराने/अस्पष्ट कंपाइलर्स के बारे में बात कर रहा था क्योंकि अधिकांश आधुनिक कंपाइलर्स सी ++ 03 में बहुत अच्छी तरह से समर्थन करते हैं। –

+2

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

4

सबसे असमर्थित विशेषताएं क्या हैं?

चलो अमूर्त export, जो दुख की बात है, असफल रहा एक प्रयोग था। फिर, कंपाइलर उपयोगकर्ताओं की गिनती से यह शायद दो चरण लुकअप है, जो दृश्य C++ अभी भी ठीक से लागू नहीं होता है। और वीसी में उपयोगकर्ताओं के बहुत सारे हैं।

+1

+1: यह _the_ कम से कम समर्थित C++ 03 सुविधा होना चाहिए। –

+0

@ चार्ल्स: हाँ, लेकिन 'निर्यात' इतना स्पष्ट है, मैंने सोचा कि जब तक मेरा जवाब मिलता है तब तक लगभग 10 उत्तरों' निर्यात 'चिल्लाएंगे। – sbi

+1

इतना है कि मैं पूरी तरह से अनदेखा करता हूं और भूल जाता हूं कि यह भी मौजूद है, जैसा कि मैं उपयोग करता हूं हर कंपाइलर की तरह। –

1

नामस्थान लगभग के आसपास रहे हैं। टेम्पलेट्स में शायद कुछ गहरे स्थान, शायद। लेकिन नामस्थान? बिल्कुल नहीं। यहां तक ​​कि टेम्पलेट्स के साथ, उपयोग परिदृश्य के विशाल, विशाल बहुमत ठीक हैं। कुछ कंपाइलर्स सही नहीं हैं (वे सॉफ़्टवेयर हैं), लेकिन एक सी ++ 03 सुविधा का समर्थन नहीं कर रहे हैं जो निर्यात नहीं है? ऐसा नहीं होता है। अधिकांश कंपाइलर भाषा का विस्तार करें, को कम करें, और C++ 0x का समर्थन करने के लिए आगे बढ़ रहे हैं।

आरटीटीआई और अपवादों का अक्सर खराब कुशल कार्यान्वयन का आरोप लगाया जाता है, लेकिन खराब कार्यान्वयन अनुरूपता नहीं होती है।

1

यदि आप मुख्य स्ट्रीम कंपाइलर के साथ मुख्य स्ट्रीम में प्रोग्रामिंग कर रहे हैं तो आम तौर पर आपको सी ++ 03 मानक समर्थित सब कुछ मिल जाता है (एसबीआई द्वारा उल्लिखित निर्यात को छोड़कर (लेकिन फिर किसी ने भी सुविधा का उपयोग नहीं किया (क्योंकि यह नहीं था समर्थित)। मुख्य धारा से आगे संकलक आमतौर पर कम विशेषताएं हैं (लेकिन वे सभी आगे बढ़ रहे हैं (कुछ दूसरों की तुलना में धीरे-धीरे))

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

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

एसओसी उपकरणों द्वारा एक माध्यमिक उदाहरण होगा। वहां कंपाइलर्स इतने विशिष्ट हैं कि वे आम तौर पर घर के कंपाइलर्स में होते हैं और केवल उन पर अधिक काम करते हैं क्योंकि एसओसी कंपनी का खर्च हो सकता है और नतीजतन अन्य कंपाइलरों के पीछे एक लंबा रास्ता (या कम से कम आगे) लगाना पड़ता है।

+0

कोई रास्ता मार्टिन नहीं! असली लें। मैं नवीनतम ओएसएक्स हिम तेंदुए का उपयोग कर रहा हूं और इसके साथ आने वाली जीसीसी किसी भी सी ++ 03 सुविधाओं का समर्थन नहीं करती है। और चूंकि मेरे पास केवल वायरलेस इंटरनेट है, इसलिए मैं इसे अपग्रेड नहीं कर सकता, भले ही ऐप्पल परेशान हो (जो यह नहीं हो सकता है)। – Yttrill

+2

@Yttrill: अगर मुझे सही याद है, तो ऐप्पल जीसीसी 4.2.1 का उपयोग करता है, जिसे [18 जुलाई 2007 को जारी किया गया है] (http://gcc.gnu.org/gcc-4.2/)। जब तक आप 2000 के आसपास जारी किए गए जीसीसी 3 के पुराने संस्करण का उपयोग नहीं कर रहे हैं (जो मुझे संदेह है), मुझे पूरा यकीन है कि आपका जीसीसी सी ++ 03 की कई विशेषताओं का समर्थन करता है। शायद आप सी ++ 0x के बारे में बात कर रहे हैं? – peoro

+2

@Yttrill: आपको भ्रमित मानकों का होना चाहिए। नामस्थान, टेम्पलेट्स, आरटीटीआई, और अपवाद ओएसएक्स समेत हर जगह काफी उपलब्ध हैं। –

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