2012-04-06 16 views
7

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

मेरा कोड बेस नकली रैल्यू संदर्भ (बूस्ट मूव लाइब्रेरी का उपयोग करके), वैरैडिक टेम्पलेट्स (बूस्ट प्रोसेसर का उपयोग करके) और कुछ मामलों में अभिव्यक्ति टेम्पलेट्स का भारी उपयोग करता है।

मैं rvalue संदर्भ, सही अग्रेषण, डिफ़ॉल्ट और कन्स्ट्रक्टर, वैरैडिक टेम्पलेट्स, और ऑटो और decltype के लिए हटाकर क्लीनर कोड बेस प्राप्त करने के लिए C++ 11 पर स्विच करने के लिए प्रेरित हूं।

यदि मैं ऐसा करता हूं, तो मैं इसे सरल बनाने के लिए मौजूदा कोड पर कुछ पुन: कार्य कर सकता हूं (टेम्पलेट उपनाम का उपयोग करके और constexpr हो सकता है)। उस स्थिति में मुझे mingw का उपयोग करके विंडोज प्लेटफार्म के लिए जीसीसी पर स्विच करना होगा, क्योंकि विजुअल स्टूडियो में डिफॉल्ट और डिलीट, और वैरिएडिक टेम्पलेट के लिए कोई कार्यान्वयन नहीं है। इसके अलावा मुझे डीडीबीजर और एक अलग कोड संपादक के रूप में जीडीबी पर स्विच करना होगा।

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

मुझे यह जानना अच्छा लगता है कि मध्यम या बड़े पैमाने पर प्रोजेक्ट या तो वाणिज्यिक या ओपन सोर्स का कोई भी उपरोक्त सी ++ 11 सुविधाओं का उपयोग करने का इरादा रख रहा है? और इस तरह के प्रवासन करने के लिए कितने प्रयास की आवश्यकता है?

कोई व्यावहारिक अनुभव, सुझाव या ज्ञान के शब्द मुझे निर्णय लेने में मदद करेंगे।

+1

सलाह और सूची प्रश्न आम तौर पर स्टैक ओवरफ़्लो में नहीं होते हैं। –

+1

मैं सुझाव दूंगा कि आप थोड़ी देर प्रतीक्षा करें। उचित वीसी ++ समर्थन तक प्रतीक्षा करें। Mingw32 में हेडर फ़ाइलें समस्याग्रस्त है। –

+0

को क्लैंग प्रोजेक्ट पर एक नज़र डालें, उनके पास [सी ++ 11 माइग्रेटर] [1] रिपोजिटरीज [1]: http://blog.llvm.org/2013/04/status-of-c11- migrator.html – Alex

उत्तर

7

सबसे पहले: यह नीति पर निर्भर करता है।

सभी तकनीकों की तरह, किसी चीज़ से स्विच करना जो कुछ नया काम करता है वह खुद में जोखिम है। आपकी मानसिकता और आपकी परियोजना की आलोचना के आधार पर, आपके द्वारा स्वीकार किए जाने वाले जोखिम की डिग्री भिन्न हो सकती है (उदाहरण के लिए, मैं निजी परियोजनाओं के लिए क्लैंग के वृक्ष संस्करण के शीर्ष का उपयोग करता हूं लेकिन काम पर परिपक्व जीसीसी)।

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

आप mentionned:

  • rvalue का संदर्भ & सही अग्रेषण
  • default/delete
  • variadic टेम्पलेट्स
  • प्रकार निष्कर्ष (auto/decltype)
  • टेम्पलेट उपनाम और constexpr

वीसी ++ 11 support for many C++11 features के साथ आता है। उदाहरण के लिए, आप रैवल्यू संदर्भ और टाइप अनुमान का उपयोग शुरू कर सकते हैं। और यदि मैं सही ढंग से याद करता हूं, तो उनको जीसीसी 4.5.एक्स शाखा के साथ इस्तेमाल किया जा सकता है, जो पहले से ही एक वर्ष से अधिक पुराना है, इसलिए पहना जाता है।

आपकी सूची से एक उल्लेखनीय अनुपस्थिति lambdas उदाहरण के लिए, जो वीसी ++ 11 और जीसीसी दोनों द्वारा समर्थित हैं।

यदि आप आगे बढ़ना चाहते हैं, तो आपको कंपाइलर और पर्यावरण स्विच करना होगा। प्रयास काफी अधिक है क्योंकि आपको टीम को फिर से प्रशिक्षित करने की आवश्यकता होगी (व्यक्तिगत रूप से मेरे पास mingw पर gdb के साथ कुछ मौसा हैं ...)।

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