क्या C ++ नेट का बड़े पैमाने पर उपयोग किया जाता है?


25

मैं परंपरा से एक C ++ कोडर हूं। पिछले 12 महीनों में या तो मैं बहुत सी सी # कोडिंग कर रहा हूं, और सी # के व्यावहारिक दृष्टिकोण से सुखद आश्चर्य हुआ है (एक बार मैंने इसे कोड करने की कोशिश करना बंद कर दिया था जैसे कि यह "कचरा संग्रह के साथ सी + +" था)।

हमारे पास हाल ही में कुछ स्नातक हैं और जब मुझे उनमें से एक की मदद करने का एहसास हुआ, तो वह C ++ में .Net का उपयोग कर रहा था। उसके पूछने के बाद, उसने कहा कि उसे "उसके प्रबंधक द्वारा सी ++ का उपयोग करने के लिए कहा गया था"। स्पष्ट रूप से संचार समस्या एक तरफ, मुझे लगता है कि वह .Net का उपयोग कर रही थी क्योंकि वह एकमात्र ढांचा है जिसे उसने उजागर किया है।

मैं तब एक पुराने डेवलपर के सामने एक पुराने प्रोजेक्ट के लिए आया था, जिसने फॉर्म के फ्रंट एंड को चलाने के लिए C ++ का भी उपयोग किया था। अब यह उस समय के आसपास लिखा गया होगा। नेट पहली बार दिखाई दिया, इसलिए मुझे लगता है कि यह .Net के साथ खेलने के लिए अपने हिस्से पर सीखने का अभ्यास था। यह केवल एक छोटी सी उपयोगिता ऐप थी।

इस ऐप में कुछ मामूली संशोधन करने के बाद, मुझे यह प्रतीत हुआ कि ड्राइव करने के लिए C ++ का उपयोग करना .Net आपको दोनों दुनिया के सबसे खराब देता है। कोई कचरा संग्रह या स्मृति सुरक्षा नहीं है, लेकिन किसी भी वास्तविक गति / अनुकूलन के अवसरों के समान नहीं है क्योंकि आप एक प्रबंधित रूपरेखा के साथ काम कर रहे हैं।

तो मेरा सवाल यह है कि क्या लोग किसी भी बड़े स्टैंड (यानी नॉन-प्लंबिंग) के उत्पादन कोड के लिए C ++ .Net का उपयोग करते हैं, और यदि ऐसा है तो आपके ऐसा करने के क्या कारण हैं? मैं स्वतंत्र रूप से मानता हूं कि मैंने कभी भी C ++ .Net एक्सटेंशन में गहराई से नहीं डाला है, इसलिए मैं इसे एक असंतुष्ट कर सकता हूं।

जवाबों:


32

सी ++। नेट (या, ठीक, C ++ / CLI) करता है कचरा संग्रहण है, बस सब कुछ जो .NET के ऊपर रन की तरह। C ++ उचित के साथ संगत रहते हुए इसे प्राप्त करने के लिए, यह ^सिंटैक्स और gcnewकचरा एकत्र ('सुरक्षित') पॉइंटर्स के लिए उपयोग करता है ।

C ++ / CLI को कई लोगों द्वारा घृणित माना जाता है, यह C # या C ++ की तुलना में उचित रूप से काम करने के लिए अधिक अप्रिय है, और या तो अधिक जटिल है (केवल इसलिए कि यह C ++ की जटिलता को तालिका में लाता है और जोड़ता है कि यह काम करने के लिए क्या लेता है। मिश्रण के लिए .NET के साथ)। लर्निंग C # आमतौर पर एकल मध्यम आकार की परियोजना के दायरे में भी भुगतान करता है। हालांकि, एक बात यह है कि यह न तो C # और न ही देशी C ++ कर सकता है: .NET के खिलाफ मौजूदा C ++ को संकलित करें और अन्य .NET घटकों से बात करें।

नतीजतन, यह एक स्क्रैच प्रोजेक्ट के लिए C ++ / CLI का उपयोग करने के लिए बहुत अधिक समझ में नहीं आता है - कुछ भी। .NET संबंधित जो इसके साथ किया जा सकता है वह C # में भी किया जा सकता है, बहुत अच्छे वाक्यविन्यास और कच्चे को उजागर नहीं करने की अतिरिक्त सुरक्षा के साथ। डिफ़ॉल्ट रूप से संकेत। इसका सबसे प्रमुख राइसन-डीट्रे मौजूदा कोडबेस को .NET में पोर्ट कर रहा है। एक कंपनी जो .NET का उपयोग करना शुरू करने का निर्णय लेती है, लेकिन (अब तक संसाधन और समय की कमी के कारण असमर्थ) सॉफ्टवेयर के हर उस टुकड़े को फिर से लिखना, जो अब तक C ++ / CLI का उपयोग कर सकते हैं, अपने मौजूदा कोडबेस का उपयोग कम से कम बदलावों के साथ करते रहने के लिए कर सकते हैं। और फिर C # एक-एक करके उनके सिस्टम के घटकों को फिर से लिखना। कम से कम यही सिद्धांत है; मैंने खुद को अभ्यास में कभी नहीं देखा है, इसलिए मैं यह नहीं बता सकता कि यह कितना अच्छा काम करता है।

यह भी ध्यान दें कि C # स्वयं देशी पुस्तकालयों के साथ इंटरफ़ेस कर सकता है, इसलिए भले ही आपको मौजूदा C ++ कोडबेस का उपयोग करना हो, आपको जरूरी नहीं कि उन्हें .NET के विरुद्ध पुनः स्थापित करना पड़े: अक्सर, COM या P / Invoke के माध्यम से उनके साथ इंटरफेस करना बेहतर उपाय है। ।


10
कृपया ध्यान दें कि पी / इनवोक के साथ 'देशी पुस्तकालयों के साथ इंटरफेसिंग' स्थिर कार्यों के साथ डीएल तक सीमित है, और COM अपने आप में एक परेशानी है। C ++ / CLR में एक आवरण आपको कुछ सीमाओं के साथ अपने C # कोड में पूर्ण आकार के मूल बैकएंड / प्रोजेक्ट को आसानी से एक्सेस करने की अनुमति देता है। मैं इसे विकास के लिए उपयोग नहीं करूंगा, लेकिन गोंद के रूप में, यह पी / आह्वान की तुलना में बहुत साफ है और यह मार्शेलिंग है।
मैक्स

दूसरा - और मुझे लगता है कि Microsoft ने स्वाभाविक रूप से सहमति व्यक्त की है, जिस तरह से उन्होंने C ++ को फिर से जोड़ दिया है, जो मूल विकास में अपनी सही जगह पर फिर से जोड़ दिया है।
जोश ग्रिफ़र

2
ध्यान दें कि भाषा को वास्तव में C ++ / CLI कहा जाता है, C ++। NET नहीं।
१२:०२ पर svick

@ स्विक: सही। संपादित।
तदमर्स

1
@ मैक्स टीबीएच माइक्रोसॉफ्ट ने सब कुछ मूल निवासी बना दिया है। तो अब, आपको C ++ / CLI की बिल्कुल भी आवश्यकता नहीं है, मूल कोड में इंटरफ़ेस # के लिए उन गंदा रैपर लिखने की ज़रूरत नहीं है - बस सुनिश्चित करें कि वे WinRT / COM ऑब्जेक्ट हैं और आपका काम हो गया।
gbjbaanb
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.