2010-07-02 16 views
11

संभव डुप्लिकेट का उपयोग करने का उपयोग करें या नहीं करने के लिए:
How are you using C++0x today?C++ 0x सुविधाओं

मैं एक काफी नई प्रणाली पर एक टीम के साथ काम कर रहा हूँ। हम एमएसवीसी 2010 में माइग्रेट करने के बारे में बात कर रहे हैं और हम पहले ही जीसीसी 4.5 में माइग्रेट हो चुके हैं। ये एकमात्र कंपाइलर हैं जिनका हम उपयोग कर रहे हैं और हमारे पास किसी भी समय विभिन्न कोडों को हमारे कोड को बंद करने की कोई योजना नहीं है।

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

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

क्या मुझे यह सोचना गलत है? ऐसा नहीं है कि मैं प्रस्ताव दे रहा हूं कि हम अपने उभरते कोडबेस को मूल रूप से बदल दें, लेकिन सी ++ 0x सुविधाओं का उपयोग करना शुरू करें जहां सुविधाजनक हो। हम जानते हैं कि हम किस कंपाइलर का उपयोग कर रहे हैं और बंदरगाह के लिए तत्काल योजना नहीं है (यदि हम कभी भी कोड बेस पोर्ट करते हैं, तो निश्चित रूप से निश्चित रूप से संकलक सी ++ 0x सुविधाओं के साथ-साथ लक्ष्य प्लेटफ़ॉर्म के लिए भी उपलब्ध होंगे)। अन्यथा मुझे ऐसा लगता है कि 1 99 7 में आईस्ट्रीम के उपयोग से परहेज करना सिर्फ इसलिए था क्योंकि आईएसओ सी ++ मानक अभी तक प्रकाशित नहीं हुआ था, इस तथ्य के बावजूद कि सभी कंपाइलर्स पहले ही उन्हें पोर्टेबल फैशन में उपलब्ध करा चुके हैं।

यदि आप सभी सहमत हैं, तो क्या आप मुझे उन तर्कों को प्रदान कर सकते हैं जिनका उपयोग मैं अपनी स्थिति को मजबूत करने के लिए कर सकता हूं? यदि नहीं, तो क्या मुझे इस पर कुछ और विवरण मिल सकता है "जब तक सी ++ 0x मानक नहीं है" विचार? बीटीडब्ल्यू, किसी को पता है कि यह कब होगा?

+0

क्या आप "किसी भी समय जल्द से जल्द" का अर्थ समझने की देखभाल करेंगे? –

+1

@Neil विकल्प जब तक विंडोज और लिनक्स के लिए आते हैं तो वे इतने अच्छे हैं कि वे जीसीसी/एमएसवीसी अप्रचलित बनाते हैं। – stinky472

उत्तर

10

मैं प्रति-सुविधा के आधार पर निर्णय लेता हूं।

याद रखें कि मानक वास्तव में पूरा होने के करीब है। जो कुछ बचा है वह मतदान, बगफिक्सिंग और अधिक वोटिंग है।

तो auto जैसी एक साधारण सुविधा दूर नहीं जा रही है, या इसके अर्थशास्त्र बदल गए हैं। तो इसका इस्तेमाल क्यों न करें।

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

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

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

यह सी ++ 0x सुविधा से बचने के लिए मूर्खतापूर्ण लगता है क्योंकि वे अभी तक औपचारिक नहीं हैं। उन सुविधाओं से बचें जिन्हें आप पूर्ण, बग-फ्री और स्थिर होने पर भरोसा नहीं करते हैं, लेकिन बाकी का उपयोग करें।

+0

सलाह के लिए धन्यवाद आधा! मैं इसे ले जाऊंगा और देख सकता हूं कि क्या मैं अपने सहकर्मियों को चुनिंदा रूप से सी ++ 0x की कुछ विशेषताओं का उपयोग करने के लिए मना सकता हूं। थोड़ी सी पृष्ठभूमि प्रदान करने के लिए, मैं एक ऐसी टीम में हूं जो मानक पुस्तकालय का उपयोग अपने स्वयं के हैंडोल किए गए संग्रहों पर करने में अनिच्छुक है। कारण का एक हिस्सा यह है कि वे इटेटरेटर वाक्यविन्यास से नफरत करते हैं। धीरे-धीरे अधिक से अधिक लोग उनका उपयोग करने आए हैं क्योंकि उन्हें पता है कि ऐसा करने का कोई अच्छा कारण नहीं है, लेकिन अभी भी लूप के लिए एक पुनरावृत्ति आधारित कहने वाले वाक्यविन्यास के बारे में बहुत सी शिकायत है। मुझे कोई फर्क नहीं पड़ता क्योंकि मैंने सबकुछ टाइप किया है और सिंटैक्टिकल रिडंडेंसी – stinky472

+0

नहीं है [...] मुझे इतना परेशान करता है (केवल तार्किक अनावश्यकता), लेकिन यह सी ++ का उपयोग करके बोर्ड पर अधिक लोगों को सही तरीके से प्राप्त करने में मदद कर सकता है अगर हमारे पास अभी था, कहो, ऑटो। – stinky472

+0

@ stinky472: सी ++ 0x का उपयोग न करने का कोई कारण नहीं है यदि आप जानते हैं कि आपके पास एक कंपाइलर है जो इसका समर्थन करता है। याद रखें कि सी ++ 0 एक्स कई प्रदर्शन संवर्द्धन और अन्य चीजें प्रदान कर सकता है जो C++ 03 नहीं कर सकते हैं। यह सच है कि सैद्धांतिक रूप से, एक सुविधा बदल सकती है। लेकिन जब आप अपडेट करते हैं और मानक समाप्त होता है तो इसे बदलने की लागत रैवल्यू संदर्भ, ऑटो, decltype, variadic टेम्पलेट्स का उपयोग न करने की लागत से बहुत कम है। – Puppy

8

सैद्धांतिक लेकिन व्यावहारिक नहीं C++ 0x का उपयोग करने का नुकसान:

  • विभिन्न compilers करने के लिए बंदरगाह के लिए यह कठिन बनाता है।
  • किसी भी प्रकाशित मानक का पालन नहीं कर रहा है। C++ 0x का उपयोग करने का

प्रैक्टिकल फायदे:

  • अपने दैनिक जीवन को आसान है, इसलिए अधिक उत्पादक बनाता है।

यह सैद्धांतिक रूप से सही क्या है, और व्यावहारिक क्या है के बीच बहस है। यदि आपकी टीम का वास्तव में इस कोड के साथ कुछ करने का कोई इरादा है, तो व्यावहारिक सैद्धांतिक दस गुना से अधिक होना चाहिए।

+0

विशेष रूप से यदि आप बिल्कुल निश्चित हैं (जैसा कि आप प्रतीत होते हैं) कि आप इस कोड को उस सिस्टम पर पोर्ट नहीं कर रहे हैं जिसका संकलक इसे (अभी तक) समझ में नहीं आता है। मैं आपके सहयोगी (शायद थोड़ा * बहुत * अच्छी तरह से: पी) के बारे में सोचने के "मानक अच्छे" के साथ सहानुभूति व्यक्त कर सकता हूं, लेकिन यदि कोई वास्तविक नकारात्मक नतीजे नहीं हैं, तो यह केवल एक अनावश्यक बाधा है। – shambulator

+7

सैद्धांतिक, लेकिन संभावना नहीं, सी का उपयोग करने का नुकसान ++ 0x: प्रस्तावित मानक में दो कार्यान्वयन में कीड़े प्रयोग कर रहे हैं, या परिवर्तनों के कारण, आप कोड जीसीसी/MSVC के विशिष्ट संस्करणों पर फंस जा सकता है। उदाहरण: यदि आपने इसे लगभग 7 महीने पहले किया था और अत्यधिक उपयोग की गई अवधारणाएं थीं। यह भी देखें: विजुअल स्टूडियो 6. – KitsuneYMG

+0

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

3

हमें एक ही समस्या थी इसलिए हमने समझौता किया। हमने सी ++ 0 एक्स टीआर 1 रिलीज लिया और फिर केवल उन हिस्सों को लिया जिन्हें हम जानते थे कि हम उपयोग करना चाहते थे। बहुत सारे काम की तरह लगता है, लेकिन अब तक यह अच्छी तरह से काम किया है। हम रेगेक्स पुस्तकालयों, tuples, और कुछ अन्य का उपयोग कर रहे हैं। एक बार मानक को मंजूरी मिलने के बाद, हम पूर्ण C++ 0x पर माइग्रेट हो जाएंगे। यह स्पष्ट रूप से सबसे अच्छा समाधान नहीं है लेकिन यह वह था जिसने हमारे लिए अच्छा काम किया है।

+0

+1 धन्यवाद उदाहरण के लिए नाथन जिसके लिए हम तुलना कर सकते हैं। मैं एक समान समझौता की तलाश में हूं: एफडीसी फीचर्स के साथ पहले से ही उपलब्ध हो रहा है, न कि अधिक विदेशी लोग जो आगे संशोधन कर सकते हैं। – stinky472

7

एक चीज जिसकी आपको आवश्यकता नहीं है (ज्यादातर) अब चिंता की जा रही है या नहीं, क्योंकि कामकाजी मसौदा "अंतिम समिति ड्राफ्ट" (एफसीडी) मार्च में वापस आ गया। फीचर-वार जमे हुए होना चाहिए, मानक समिति सी ++ 0x के लिए किसी और प्रस्ताव को स्वीकार नहीं करेगी।

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

आपको किसी भी सुधार/समायोजन के साथ अद्यतन प्राप्त करने के लिए शायद वीसी ++ 10 जैसे कंपाइलरों के लिए कुछ समय इंतजार करना होगा।

+0

धन्यवाद, एफसीडी को इंगित करना एक अच्छा विचार है! मुझे लगता है कि शायद इस बहस में कुछ लोगों को जीतने की इजाजत दे सकती है अगर हम चुनिंदा चुनते हैं कि सी ++ 0 एक्स फीचर्स का उपयोग हम कर सकते हैं। – stinky472

1

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

आप

कहा कि अगर हम कभी बंदरगाह कोड बेस, तब तक निश्चित रूप से compilers C++ 0x के साथ उपलब्ध हो जाएगा लक्ष्य मंच

के लिए लेकिन एक संकलक मौजूद है कि सुविधाओं के साथ ही एक मंच के लिए हमेशा यह मतलब नहीं है कि यह विशेष रूप से उत्पादन प्रणालियों पर स्थापित/उपयोग/चाहता था।

यदि दूसरी तरफ, आप स्वयं को संकलित करने का इरादा रखते हैं, तो यह कोई मुद्दा नहीं है।

+0

+1 धन्यवाद लाजनोइड और मैंने लिनक्स डिस्ट्रोज़ पर विचार नहीं किया। हम अन्य वितरणों का समर्थन करना चाह सकते हैं जो जीसीसी के पुराने संस्करणों तक सीमित हो सकते हैं। मुझे उस बिंदु को विचाराधीन वैध मुद्दे के रूप में उठाना होगा, लेकिन मुझे आशा है कि हम इससे पहले कि हम इससे लाभ उठा सकें, हम कुछ साल पहले प्रतीक्षा करने के बजाय कुछ बुनियादी सी ++ 0x सुविधाओं का उपयोग कर सकते हैं। – stinky472

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