2009-12-19 23 views
44

मैं सी ++ से काफी परिचित हूं, इसलिए मैंने .NET और उसके सभी डेरिवेटिव (विशेष रूप से सी #) सीखने पर विचार किया।सी ++/सीएलआई: मुझे इसका उपयोग क्यों करना चाहिए?

जिस तरह से मैं सी ++/सीएलआई में घुस गया, और मैं जानना चाहता हूं कि उस भाषा के लिए कोई विशिष्ट उपयोग है या नहीं? क्या यह मूल सी ++ से सी # में बदलने के लिए मध्यवर्ती भाषा होने का अनुमान है?

मेरे सिर पर आ गया एक और सवाल यह है कि अभी भी .NET ढांचे में इतनी सारी प्रोग्रामिंग भाषाएं क्यों हैं? (वीबी, सी ++/सीएलआई, सी # ...)

+10

अच्छा सवाल। और आपने आधे भाषाओं का भी उल्लेख नहीं किया था। मेरा मतलब है, डब्ल्यूटीएफ एफ # है? और जे #? क्या हमें पूरे वर्णमाला की आवश्यकता है या क्या? –

+3

@ कैमिलो मार्टिन: जे # अब तक बहुत अधिक इतिहास है और एफ # ओकंपल पर आधारित एक कार्यात्मक भाषा है। –

+2

दिलचस्प सवाल। आज बहस कैसे खड़ी है? – Independent

उत्तर

46

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

यदि आपको देशी सी ++ के साथ इंटरऑप करने की आवश्यकता है, तो कक्षाएं जिनमें फ़ंक्शन हैं और नए की आवश्यकता है और कक्षा के उदाहरण को नष्ट/नष्ट करने के लिए कीवर्ड हटाएं, तो आपके पास सी ++/सीएलआई का उपयोग करने के अलावा कोई विकल्प नहीं है। Pinvoke ऐसा नहीं कर सकता है, केवल सी ++ संकलक जानता है कि आवंटित करने के लिए कितनी मेमोरी और this पॉइंटर को सही तरीके से कैसे ठीक किया जाए।

.NET ढांचे में सी ++/सीएलआई में लिखा गया कोड शामिल है, विशेष रूप से System.Data और WPF के प्रेजेंटेशनकोर में। यदि आपके पास अप्रबंधित इंटरऑप की ज़रूरत नहीं है या लीगेसी कोड बेस के साथ काम नहीं करना है तो सी ++/सीएलआई चुनने के कुछ कारण हैं। सी # या वीबी.नेट बेहतर विकल्प हैं। सी ++/सीएलआई का फीचर सेट 2005 के आसपास जमे हुए हो गया है, इसमें लैम्बडास या लिंक सिंटैक्स जैसे हालिया जोड़े के लिए कोई समर्थन नहीं है। न ही आईडीई सी # और वीबी.नेट आईडीई में उपलब्ध कई घंटियां और सीटी का समर्थन करता है। उल्लेखनीय है कि VS2010 प्रारंभ में सी ++/सीएलआई के लिए IntelliSense समर्थन के बिना जहाज जाएगा। वहां एक चुंबन-मौत का थोड़ा सा।

अद्यतन: वीएस2012 में पुनरुद्धारित, IntelliSense समर्थन वापस आ गया है। सी ++/सीएक्स के लिए कम से कम धन्यवाद में, एक भाषा विस्तार जो सी ++ में WinRT ऐप्स लिखने को सरल बनाता है। इसका वाक्यविन्यास सी ++/सीएलआई के समान है। विंडोज फॉर्म प्रोजेक्ट टेम्पलेट हटा दिए गए थे, डिजाइनर हालांकि अभी भी काम करता है। वीएस2012 में नया डिबगिंग इंजन सी ++/सीएलआई का समर्थन नहीं करता है, आपको टूल्स + विकल्प, डिबगिंग, जनरल में "प्रबंधित संगतता मोड" विकल्प चालू करना होगा।

+0

मेरे पास सी # में एक विंडोज ऐप है, लेकिन मुझे पता चला कि मुझे अप्रबंधित कोड भी चाहिए, क्योंकि मुझे विंडोज शैल, विंडोज सर्च इत्यादि के साथ इंटरफेस करना है। मुझे सी ++ या सी ++/सीएलआई क्या सीखना चाहिए? सी ++/सीएलआई सी ++ के पूर्व ज्ञान के बिना सीखा जा सकता है? धन्यवाद। –

+0

@ilian, अगर आपको केवल विंडोज शैल या विंडोज सर्च में कॉल करने की आवश्यकता है, तो बस पी/Invoke का उपयोग करें। यदि आप बहुत से अप्रबंधित कोड के साथ इंटरफ़ेस करना चाहते हैं, तो C++/CLI का उपयोग करना आसान हो सकता है। यदि आप एक डीएलएल लिखना चाहते हैं तो आपको सी ++/सीएलआई की आवश्यकता है जो एक अप्रबंधित भाषा से कॉल करने योग्य है। उदाहरण के लिए मेरे पास सी # में लिखा गया डीएलएल है जिसे एडीए द्वारा बुलाया जाता है। एडीए को एक अप्रबंधित पुस्तकालय से लिंक करना है, और वह सी ++/सीएलआई है। यह बदले में सी # को कॉल कर सकता है। – erict

11

यह वास्तव में मुख्य रूप से इंटरमीडिएट भाषा के रूप में लक्षित है, मूल रूप से, अप्रबंधित सी ++ के साथ नेट कोड को लिंक करने के लिए। अपने आप को एक पक्ष बनाओ, अगर आपको इसकी आवश्यकता नहीं है तो इसका इस्तेमाल न करें। सी ++/सीएलआई वाक्यविन्यास एक गड़बड़ है।

आपके दूसरे प्रश्न के संबंध में ... मुझे लगता है कि आज सी # नेट में प्रमुख भाषा है, लेकिन हर कोई अपनी शैली और प्रतिमान पसंद नहीं करता है। .NET की आर्किटेक्चर नई भाषाओं को आसान बनाता है (देखें F #, जिसका उद्देश्य कार्यात्मक प्रोग्रामिंग करना है)।

+0

* "सी ++/सीएलआई वाक्यविन्यास एक गड़बड़ है। * * - इसके बारे में इतना गन्दा क्या है? स्पष्ट रूप से, किसी भाषा के वाक्यविन्यास के साथ बहुत कुछ गलत नहीं हो सकता है, अगर इसे पूरी तरह से नए क्षेत्र (सी ++/सीएक्स) में लगभग कोई बदलाव नहीं किया जाता है। डाउनवोट "उपयोग नहीं करने" के लिए पूरी तरह से अलग-अलग सलाह के लिए है। जब आप इंटरऑप लागू नहीं कर रहे हों तब भी इसका उपयोग करने के वैध कारण हैं। यह सी # के रूप में संक्षेप में है, और निर्धारक विनाश लागू करता है। यदि सी # किया, तो यह पूरी तरह से बग की हल हो गई होगी। – IInspectable

0
मेरे लिए

, मैं जब वहाँ ++ पुन: उपयोग करने ग वर्ग

5

मैं C++/CLI को देखा नहीं है कोई दूसरा रास्ता नहीं है इसका इस्तेमाल करने के लिए है, लेकिन यह नेट दुनिया harnesses - एक के बीच के रूप में यह के बारे में सोच सी ++ और सी # जहां आपके पास दोनों दुनिया के सर्वश्रेष्ठ हैं। यह उन स्थितियों में उपयोगी हो सकता है जहां आप सी ++ का उपयोग करना चाहते हैं जो आसानी से .NET ऑब्जेक्ट्स और इसके मूल बीसीएल तक पहुंच सकते हैं। इस article पर सी ++/सीएलआई के प्राइमर्स पर चर्चा करें। दुर्भाग्यवश, मैंने प्रबंधित सी ++ एप्लिकेशन के बारे में नहीं सुना है क्योंकि इसने चीजों के सिंटैक्स पक्ष पर बहुत से सी ++ दोस्तों को फटकारा है और अनुयायियों की सभा खो दी है जो सी ++ की अप्रबंधित दुनिया में वापस चले गए हैं।

उम्मीद है कि यह मदद करता है, सर्वश्रेष्ठ संबंध, टॉम।

7

मैंने कुछ अप्रबंधित सी ++ पुस्तकालयों के लिए .NET API बनाने के लिए C++/CLI का उपयोग किया है। मापदंडों को पास करना और मार्शलिंग कुछ लोगों को इस्तेमाल किया जाता है (प्रयुक्त प्रकारों के आधार पर), लेकिन एक बार जब आप इसे लटका लेंगे, तो यह वास्तव में प्रबंधित और अप्रबंधित दुनिया के बीच के अंतर को पुल करने का एक अच्छा तरीका है।

16

पहला सी # .NET का 'व्युत्पन्न' नहीं है। .NET एक भाषा नहीं है, यह सीएलआर के आधार पर एक आवेदन ढांचा और वर्ग पुस्तकालय है, जिसके लिए कई भाषाएं मौजूद हैं।

यह कहा गया है कि .NET का उपयोग करने का सबसे अनिवार्य कारण यह है कि यह एक अच्छी तरह से डिज़ाइन किया गया क्लास लाइब्रेरी है और Win32 या MFC की तुलना में विंडोज के लिए विकसित करने का एक आसान तरीका है। हालांकि मैंने व्यक्तिगत रूप से निर्णय लिया कि मैं पुराने लोगों को एक्सटेंशन सीखने के बजाय पूरी तरह से एक नई भाषा सीखूंगा, और क्योंकि सी # को .NET के साथ काम करने के लिए जमीन से डिजाइन किया गया था, मेरा सुझाव है कि .NET के लिए पसंद की भाषा है।

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

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

-5

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

जबकि सीएलआई सी ++ अच्छा है। मुझे कोड में दर्द होता है। इसके बारे में कुछ ऐसा है जो मुझे इसमें प्रोग्राम नहीं करना चाहता है। यह "^" भी नहीं है। यह एक टूटी हुई नेट की तरह है। मैंने कुछ मिनटों में कोडिंग करने में 40 मिनट बिताए जो मुझे सी # में 10 मिनट लगा। मेरा मतलब है, कभी-कभी मैं छोड़ देता हूं और सी # का उपयोग करता हूं क्योंकि इसमें कोडिंग करते समय मुझे निराशा होती है। मेरा मतलब है कि यदि आप .NET का उपयोग करने जा रहे हैं तो आप सी # (सीएलआई सी ++ पर) का भी उपयोग कर सकते हैं।

+2

प्रश्न सी ++/सीएलआई की विशिष्ट विशेषताओं के बारे में पूछ रहा है (हां, यह वास्तव में इसे कैसे कहा जाता है)। यह "उत्तर" इस ​​पर बिल्कुल संबोधित नहीं करता है। इससे भी बदतर, यह पूरी तरह से इस बिंदु को याद करता है, और वास्तव में किसी भी राय के अनुभव के अभाव में से केवल एक रान है। क्षमा करें, -1, यह वही नहीं है जो SO के बारे में है। – IInspectable

+0

क्या सी ++ सीएलआई धीमा है ?, हाँ, क्या मैं सी ++ पुस्तकालयों को सी ++ की तुलना में अन्य भाषा में एकीकृत और उपयोग कर सकता हूं ?, हां। इसलिए, जब तक पुराने कोड के साथ संगतता के बारे में नहीं, सी ++ सीएलआई वास्तव में आला है। – magallanes

15

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

फिर कुछ साल पहले, उन्हें एहसास हुआ कि यह केवल उनके ग्राहक नहीं चाहते थे। डेवलपर्स जो .NET पर जा रहे हैं, वैसे भी आम तौर पर सी # जैसी भाषा में कूदते हैं, और बाकी के पास उनके मूल कोड में कोड रखने के कारण हैं, इसलिए वे सी ++ के साथ रहते हैं।

तो अब माइक्रोसॉफ्ट सी ++/सीएलआई के लिए मूल सी ++ कोड और कुछ .NET भाषा में लिखित प्रबंधित कोड के बीच "पुल" होने का इरादा रखता है। यह अब एक ऐसी भाषा नहीं है जिसे वे आपके पूरे कोडबेस को स्विच करने की सलाह देते हैं।

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