2010-02-26 7 views
19

क्या कोई वर्णन कर सकता है कि सी या सी ++ प्रोग्रामर के पास विंडोज के लिए विकास करते समय .Net प्रोग्रामिंग के फायदे होंगे?क्या कोई कारण है .NET विंडोज प्रोग्रामर को सी या सी ++ सीखना होगा?

+7

मैंने पहले यह प्रश्न देखा है, मैं इसे कसम खाता हूँ! – Eric

+1

की आवश्यकता है? नहीं नहीं नहीं। (अतिरिक्त संख्या प्रतिबंध को बाईपास करने के लिए है ... सुनिश्चित नहीं है कि मैंने इस टिप्पणी को क्यों जोड़ा।) – kenny

+0

क्योंकि ".NET" एम्बेडेड सिस्टम में फिट नहीं है? –

उत्तर

29

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

एक प्रोग्रामर उतना ही अच्छा है जितना उसके नीचे परतों की समझ के रूप में। .Net बहुत सारे मशीन आर्किटेक्चर मुद्दों को देखने के लिए सारणी का एक बहुत अच्छा काम करता है, लेकिन यह सही नहीं है। एबस्ट्रक्शन लेयर में अभी भी लीक हैं जहां निचले स्तर के मुद्दों की समझ से आपको नेट लेयर पर अच्छे निर्णय लेने में मदद मिलेगी।

एक छोटी, इन मुद्दों के अपूर्ण सूची में शामिल हैं:

  1. मूल कोड के साथ Interop, विशेष रूप से Windows API
  2. सीपीयू कैश जुटना के साथ (अगर तुम मुझे विश्वास नहीं है, से स्लाइड गूगल पीडीसी '09 में PLINQ प्रस्तुति) बनाम संदर्भ प्रकार प्रदर्शन
  3. मूल्य प्रकार प्रदर्शन (इस मजबूती से नेट की दुनिया में कदम मिलाकर चलने में है, लेकिन सीखने C/C++ ढेर और ढेर आवंटन कुछ मायनों में अधिक स्पष्ट) के बीच मतभेद बना देता है।
  4. कर्नेल शेड्यूलिंग समस्याएं (यानी 1000 धागे को स्पिन करना क्यों बुरा विचार है)
  5. कचरा कलेक्टर को समझना गैर-कचरा एकत्रित भाषाओं में कुछ मेमोरी प्रबंधन योजनाएं लिखकर सबसे अच्छा हासिल किया जाता है।
+7

इसके लिए +1: "एक प्रोग्रामर उतना ही अच्छा है जितना उसके नीचे परतों की समझ के रूप में।" मुझे वह पसंद है। – cschol

+0

@cschol धन्यवाद, मुझे पूरा यकीन है कि मैंने इसे कहीं से चुरा लिया है, शायद वर्बेटिम नहीं, और मैं कहां से कह नहीं सकता था। –

+0

केवल PLINQ प्रस्तुति से स्लाइड्स को न देखें; वीडियो भी देखें। – Gabe

10

आपके पास पर्याप्त सी सीखना चाहिए, देशी Windows API के साथ सहज हो के रूप में यह काफी आसान है जब जटिल यूआई लिखते समय और प्रणाली के साथ बातचीत।

+4

मुझे सी या सी ++ नहीं पता है, लेकिन मुझे एमएसडीएन पर Win32 एपीआई फ़ंक्शन परिभाषाओं को देखने के लिए काफी आसान लगता है और उन्हें .NET कोड से उपयोग करें। – Samuel

+3

आपको वास्तव में सी या सी ++ को जानने की आवश्यकता नहीं है, बस एपीआई हस्ताक्षर के लिए डेटाटाइप के बीच कैसे परिवर्तित करें .... –

+2

हां, लेकिन अगर आप स्मृति को रिसाव नहीं करना चाहते हैं तो आपको सी के मेमोरी मॉडल को समझने की आवश्यकता है। – SLaks

3

हालांकि मैंने अभी से .NET में प्रोग्रामिंग करने के लिए प्रतिबद्ध किया है, मुझे पता है कि ऐसे मामले होंगे जहां मुझे तीसरे पक्ष के पुस्तकालयों का उपयोग करने के लिए इंटरऑप का उपयोग करना होगा, और संभवतः उन्हें ठीक करने के लिए अपने कोड को खोदने में सक्षम होना चाहिए कीड़े।

3

ईमानदार होने के लिए, यह केवल Win32 API तक पहुंचने की आवश्यकता होने पर ही उपयोग में जा रहा है, लेकिन उनमें से अधिकतर हस्ताक्षर ऑनलाइन उपलब्ध हैं (जैसे pinvoke.net), और .NET ढांचे के प्रत्येक नए संस्करण में और भी शामिल है आमतौर पर इस्तेमाल किए गए Win32 API कॉल के लिए रैपर।

होने C/C++ ज्ञान चीजों की बड़ी योजना में सार्थक है, लेकिन यदि आप उपयोग नहीं कर रहे यह हर रोज, आप ज्ञान जल्दी खो देते हैं!

0

आप अगर आप किसी भी गैर तुच्छ इंटरॉप कर पर योजना C++/CLI जानने के लिए चाहते हो सकता है।

2

दूसरों ने विंडोज एपीआई इंटरैक्शन की आवश्यकता को कवर किया है, लेकिन मुझे इस धारणा के साथ गलती भी मिलती है कि आप गारंटी दे सकते हैं (या आप केवल सीमित होना चाहते हैं) अपने शेष करियर के लिए .NET विकास ।

.NET एक उत्कृष्ट ढांचा है, लेकिन यह बहुत ही असंभव है कि यह आखिरी होगा। और, जैसा कि यह अच्छा है, यह हर परियोजना के लिए सबसे अच्छा विकल्प नहीं है।

बुनियादी बातें जानना - और मैं विचार करेगा C/C++ आवश्यक मूल बातें - पथ के किसी भी संख्या, नेट और जो कुछ भी अगले महान फ्रेमवर्क है सहित के लिए रास्ता खुल जाता है।

4

बस कुछ है कि सही दूर मेरे लिए होते हैं:

  1. स्पीड।
  2. पोर्टेबिलिटी।
  3. .NET स्थापना से बचें।
  4. आप किस प्रकार की चीजें कर रहे हैं, इस पर निर्भर करते हुए, सी ++ अधिक उत्पादक हो सकता है।
  5. आपको कभी बहस नहीं करना है कि क्या आपका दंत चिकित्सक अधिक दर्दनाक है कि पी/आमंत्रित करें।
1

सी और सी ++ को समझना वास्तव में आपको .NET की सराहना करता है और ऑब्जेक्ट की ज़िम्मेदारी, स्मृति प्रबंधन और प्रदर्शन अवधारणा के बारे में अधिक सावधान और जागरूक होता है। जब आप ढांचे में एक विधि बुलाते हैं तो आपको हुड के नीचे क्या हो सकता है और यह आपके लिए काम करता है और यह आपके लिए काम करता है।

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

1

यदि आप एक नेट विंडोज प्रोग्रामर हैं जो किसी दिन Google पर काम करना चाहते हैं (हम सभी नहीं हैं?), तो यह सी ++ सीखने में मदद करेगा।

+0

संदर्भ? मुझे ये यकीन करना कठिन है। क्या Google के पास कोई नेट प्रोग्रामर है? – prestomation

+0

Google में पाइथन प्रोग्रामर, जावा प्रोग्रामर, सी ++ प्रोग्रामर, और यहां तक ​​कि नेट प्रोग्रामर (ऑर्कुट एएसपीएक्स) है। इसमें कोई संदेह नहीं है कि उनके पास ऐसे लोग हैं जो अन्य भाषाओं में भी काम करते हैं। – Gabe

+2

(नहीं, हम नहीं हैं) – ima

0

सी ++ में कई कम आम कार्यों के लिए बेहतर पुस्तकालय हैं। गणित से संबंधित, विशेष रूप से, जहां इसे एसएसई और कुछ अन्य प्रोसेसर-विशिष्ट अनुकूलन तक पहुंच से बड़ा फायदा मिलता है। सी ++ के आधार पर कई प्रोटोकॉल और मानक हैं, COM जल्द ही कहीं नहीं जा रहा है - और जटिल इंटरऑप को सी ++ लिखने की तुलना में और भी गूढ़ ज्ञान की आवश्यकता है।

सी ++ अप्रचलितता में जा रहा है, लेकिन सड़क लंबी होगी।

सामान्य प्रदर्शन के संबंध में - जबकि .NET समकक्ष से तेज़ सी ++ कोड लिखना संभव है, अधिकांश सी ++ प्रोग्राम नहीं हैं और बहुत से वास्तव में धीमे हैं।

और "मूल बातें समझने" के लिए ... टेम्पलेट मेटा प्रोग्रामिंग के बिना एक भाषा चुनें। कृप्या।

1

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

+0

तो Winform के लिए आपका विकल्प क्या है? MFC? मैंने सोचा कि .NET के पक्ष में सबसे बड़ा कारण है !! – Fakrudeen

+0

मैं एमएफसी को एटीएल/डब्ल्यूटीएल पसंद करता हूं। वैकल्पिक रूप से एक यूआई ब्राउज़र नियंत्रण होस्टिंग डीएचटीएम के रूप में बनाया जा सकता है। लेकिन सभी सॉफ्टवेयर यूआई नहीं है ... –

-1

सी ++ अक्सर अपने स्वचालित संसाधन प्रबंधन की वजह से सुरक्षित है। प्रदर्शन अंतर (सी ++ के पक्ष में) आमतौर पर कोई फर्क नहीं पड़ता है लेकिन वास्तव में स्मृति उपयोग (जीसी बहुत सी रैम बर्बाद कर सकता है)।

+0

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

+0

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

0

मेरी समझ .NET प्रोग्रामिंग भाषाओं का समर्थन करने की नींव है, और स्वयं की भाषा नहीं है। वहाँ विजुअल बेसिक .NET, विज़ुअल सी नेट, है आदि

मैं C और C++ आप कभी पता नहीं चलेगा कि कब .NET एक और तकनीक के साथ प्रतिस्थापित किया जाएगा के साथ जारी रखने की सलाह देते हैं। अब तक, सी और सी ++ बदलने में धीमे हैं और भाषा में परिवर्तनों को स्वीकार करने के लिए एक संघ की आवश्यकता है। आप स्वयं को सीमित नहीं कर सकते हैं और जावा, पर्ल, PHP और LISP जैसी अन्य उपयोगी भाषाओं को सीख सकते हैं।मैं एलआईएसपी का अत्यधिक सुझाव देता हूं क्योंकि यह सी या सी ++ से बिल्कुल अलग है और आपको प्रबुद्ध करेगा।

0

यदि आप कभी भी 1-ट्रिक टट्टू से अधिक होना चाहते हैं, तो सी और सी ++ सीखें।

विंडोज एक दिन दूर चलेगा, क्योंकि निगमों और उत्पादों के साथ यही होता है। शायद हम माइक्रोसॉफ्ट के बजाय स्काइलाइट्स प्राप्त करेंगे, और .NET को एक अलग चीज़ में सुधार किया गया है - .NEW। (जो भी आप इसे कॉल करना चाहते हैं)।

तब आपका .NET कहां है? यह आपकी विशेषज्ञता की सामान्यता के रूप में चला गया है- आप अगली पीढ़ी के कोबोल प्रोग्रामर बन गए हैं, एक विरासत-केवल प्रोग्रामर।

वक्र के शीर्ष पर रहने में सक्षम होने का एकमात्र तरीका असेंबली से एसक्यूएल के सब कुछ के सिद्धांतों को जानना है।

लेकिन यह है तोअब के बारे में क्या? विंडोज़ के लिए सुरक्षा त्रुटियों के ब्योरे को समझने में सक्षम होने के लिए, विंडोज़ के लिए कर्नेल-स्तरीय दुनिया को समझने में सक्षम होने के लिए, विंडोज़ के लिए ड्राइवर लिखने में सक्षम होने के लिए, विंडोज़ के लिए ट्रिपल-ए गेम्स प्रोग्राम करने की क्षमता प्राप्त होती है। विंडोज़ के लिए पुराने अनुप्रयोग को बनाए रखने में सक्षम, सी ++ का उपयोग करने वाली फर्मों के लिए किराए पर लेने में सक्षम होने के लिए।

और उन कारणों से - आईएमओ - पर्याप्त हैं।

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