2008-12-12 11 views
75

जब विजुअल स्टूडियो 2008 में सी ++ में प्रोग्रामिंग, यही कारण है कि जब सी # का उपयोग कर refactor मेनू में देखा गया है कि जैसे कोई कार्यक्षमता है?विज़ुअल सी ++ में रिएक्टर कार्यक्षमता की कमी क्यों है?

मैं का उपयोग का नाम बदलता हूं और जब आप वहां नहीं होते हैं तो आप वास्तव में इसे याद करते हैं। मुझे यकीन है कि आप प्लगइन प्राप्त कर सकते हैं जो इसे पेश करते हैं, लेकिन सी ++ का उपयोग करते समय यह आईडीई में क्यों एकीकृत नहीं है? क्या यह कुछ गॉचा के कारण है कि सी ++ को पार्स किया जाना चाहिए?

+0

सी ++ के लिए रीफैक्टरिंग मुश्किल है लेकिन मुझे लगता है कि वीएस को एक्सकोड सी ++ में एक जैसी सभी प्रकार की कार्यक्षमता का नाम बदलना चाहिए। –

उत्तर

69

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

पढ़ें http://yosefk.com/c++fqa/defective.html#defect-8

माइक्रोसॉफ्ट जाहिर सी ++ के लिए इस विशेष सुविधा पर बाज़ी का फैसला किया है, तृतीय पक्ष डेवलपर्स के लिए इसे छोड़ रहा है क्या वे कर सकते हैं करने के लिए।

+2

+1: उत्कृष्ट लिंक, क्या यह पुस्तक चिह्नित है, धन्यवाद। –

+8

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

+16

तो हम यहां बता रहे हैं कि माइक्रोसॉफ्ट _ असंभव रूप से कठिन कार्यों को हल करने में गरीब है, जबकि ग्रहण फाउंडेशन बेहतर है? मैं प्रोजेक्ट बाधाओं के लिए वीएस में प्रोग्राम करता हूं, लेकिन जब मुझे एक वैरिएबल का नाम बदलने की ज़रूरत होती है तो मैं सिर्फ इस के लिए एक्लिप्स लॉन्च करता हूं ... – Zac

11

मुझे यकीन है कि क्यों यह इस तरह है, लेकिन तीसरे पक्ष के उपकरणों है कि मदद के लिए मौजूद नहीं हूँ। उदाहरण के लिए, अभी मैं Visual Assist X (पूरे टमाटर द्वारा) का मूल्यांकन कर रहा हूं। हम यह भी दृश्य स्टूडियो का उपयोग कर रहे 2005

+0

विजुअल असिस्ट एक्स बहुत अच्छा है और आम तौर पर नौकरी बहुत अच्छी तरह से करता है। हालांकि, अगर आप उस पर सभी टेम्पलेट मेटा-प्रोग्राम प्राप्त करते हैं तो यह आपके कुछ कोडों पर अपना हाथ फेंक सकता है। –

+2

यह सच है। मैंने देखा है कि यह टेम्पलेट्स की कुछ परतों से बहुत अच्छी तरह से संभाल नहीं करता है (जैसे बूस्ट के साथ काम करते समय)। – Brian

4

कड़ी मेहनत से किया-दर, यह VB.Net में उपलब्ध नहीं है मत मानो या तो :)

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

एक अनुमान से कम यह यह उपलब्ध कराने के "कठिनाई" के साथ कुछ हो सकता था।

पीएस मैंने अपना जवाब समुदाय विकी के रूप में चिह्नित किया क्योंकि मुझे पता है कि यह कोई उपयोगी जानकारी प्रदान नहीं कर रहा है।

5

devexpress वीएस2005 और वीएस -2008 के लिए Refactor! for C++ एड-इन प्रदान करता है।

+0

के प्राचीन संस्करण के साथ काम करने के लिए डिज़ाइन किया गया है ... और अब भी VS2010 के लिए। – newenglander

+0

हालांकि यह वीएस2005 का समर्थन नहीं करता है। – davidsheldon

1

मैं के बारे में एक साल और एक आधे के लिए दृश्य स्टूडियो के साथ Visual Assist X उपयोग कर रहे हैं। यह एक अविश्वसनीय टूल है जो आपको सामान्य सी ++ कोड के साथ बहुत मदद करता है, लेकिन यह टेम्पलेट कोड पर बहुत अच्छा प्रदर्शन नहीं करता है। उदाहरण के लिए, यदि आपके पास एक परिष्कृत नीति-आधारित टेम्पलेट डिज़ाइन है, तो यह नहीं होगा कि आपके चर का नाम बदलने के लिए, और प्रोजेक्ट अब संकलित नहीं होगा।

-3

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

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

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

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

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

आप सभी प्रोग्रामर कर रहे हैं - मैं नहीं कर रहा हूँ! और आपको लगता है कि सी ++ या किसी भी भाषा के लिए रिफैक्टरिंग को कैसे कार्यान्वित किया जा सकता है, जिसे मैं समझ नहीं पा रहा हूं। यह केवल कुछ है जिसके लिए आपको कुछ कम करने के लिए और अधिक प्रयास करना पड़ता है इस पर निर्भर करता है कि आप जिस व्यक्ति को धक्का दे रहे हैं वह कितना भारी है।

वैसे भी जिस तरह से एक अच्छा आईडीई खासकर जब यह सी # करने के लिए आता वी.एस.।

+10

"मेरा मुद्दा मिला?" - नहीं वास्तव में कोई नहीं। – AakashM

+2

मैं त्रुटियों से भरे रानों को नहीं सुनता हूं। – Kupiakos

3

ग्रहण 'नाम बदलें' सहित कुछ C++ refactorings करता है। StackOverflow पर यह question देखें।

यह भी ग्रहण के साथ माइक्रोसॉफ्ट संकलक उपयोग करना संभव है। here देखें।

ग्रहण करें और देखें कि यह आप के लिए फिट बैठता है।

3

fud और इस समस्या के भ्रम का एक बहुत नहीं है। यह अद्भुत यूट्यूब वीडियो स्पष्ट क्यों सी ++ रिफैक्टरिंग कठिन है चाहिए: https://www.youtube.com/watch?v=mVbDzTM21BQ

tl; डॉ गूगल एक संकलक (बजना + LLVM) कि अपनी मध्यवर्ती प्रारूप करने के लिए उपयोग की अनुमति देता का उपयोग करके अपने पूरे 100 मिलियन लाइन सी ++ codebase refactors।

नीचे लाइन, तृतीय पक्षों यहाँ खराब कर रहे हैं, वहाँ कोई यथार्थवादी तरीका उन्हें वी.एस. सी refactor करने के लिए ++ जब तक एमएस मध्यवर्ती परिणाम आउटपुट एक ही तरीका है। आप प्रोग्रामिंग समस्या के नजरिए से इसके बारे में लगता है कि इस स्पष्ट है: आदेश वी.एस. सी refactor करने के लिए ++ आप सी ++ में ठीक उसी तरह से वी.एस. एक ही कीड़े, सीमाओं, खामियां, हैक्स, शॉर्टकट, समाधान, आदि के साथ करता है संकलित करने के लिए सक्षम होना चाहिए में । CodeRush और Resharper की तरह सामान्य संदिग्धों पागलपन उस तरह के लिए बजट नहीं है, हालांकि जाहिरा तौर पर वे कोशिश कर रहे हैं, लेकिन यह साल हो गया है ...

http://www.jetbrains.com/resharper-cpp/

अद्यतन 2016: Resharper अब पर एक सभ्य काम करता है सी ++ रिफैक्टर। सीमाएं पूरी तरह से बड़ी/विशाल परियोजनाओं के लिए हैं।

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