2009-03-28 15 views
29

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

संपादित करें नोट:

मैं एक वेब डेवलपर हूँ, वहीं उस सीमा न दें कृपया अपना उत्तर। मैं 30 वर्ष का हूं ... मेरे पास मेरे आगे कैरियर का साल बदल रहा है।

+1

क्या आप स्पष्टीकरण दे सकते हैं यदि आप किसी वेब-एप्लिकेशन परिप्रेक्ष्य की तुलना में रूचि रखते हैं? –

+1

क्या आप एक वेब डेवलपर रहना चाहते हैं, या आप कुछ अलग करना चाहते हैं? जैसे आईफोन एप्स प्रोग्रामिंग भाषा मुख्य रूप से उद्देश्य-सी –

उत्तर

48

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

सी

  • कर्नेल स्तर सॉफ्टवेयर: असली दुनिया अनुप्रयोगों के संदर्भ में, मैं इन भाषाओं निम्न डोमेन में लागू देखते हैं।
  • हार्डवेयर डिवाइस ड्राइवर
  • पुराने, स्थिर कोड तक पहुंचने वाले अनुप्रयोगों की आवश्यकता होती है।

C, C++

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

सी # एक प्रबंधित मेमोरी मॉडल प्रदान करता है जो एक उच्च स्तर का अमूर्तता जोड़ता है। अमूर्तता का यह स्तर सुविधा जोड़ता है और विकास के समय में सुधार करता है, लेकिन निम्न स्तर के एपीआई तक पहुंच को जटिल बनाता है और विशेष प्रदर्शन आवश्यकताओं को समस्याग्रस्त बनाता है।

यह निश्चित रूप से एक प्रबंधित स्मृति वातावरण में अत्यंत उच्च प्रदर्शन सॉफ्टवेयर को लागू करने के लिए संभव है, लेकिन प्रभाव के बारे में जागरूकता आवश्यक है।

सी # की वाक्य रचना निश्चित रूप से कम मांग (और त्रुटि प्रवण) सी/सी की तुलना में है ++ और शुरू की प्रोग्रामर, एक उथले सीखने की अवस्था के लिए, है।

सी #

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

Johannes Rössel वैध मुद्दा यह है कि उपयोग सी # प्वाइंटर, असुरक्षित और अनियंत्रित कीवर्ड जिस पर सी # बनाया गया है अमूर्त की परत के माध्यम से तोड़ने में आता है। मैं जोर देता हूं कि प्रोग्रामिंग का प्रकार अधिकांश सी # विकास परिदृश्यों का अपवाद है और भाषा का मौलिक हिस्सा नहीं है (जैसा कि सी/सी ++ के मामले में है)।

+0

आपके पास अभी भी सी # में निचले स्तर की चीजों पर असुरक्षित और अनचेक जैसे कीवर्ड पर बहुत अच्छा नियंत्रण है; यदि आप सी दुनिया से बच नहीं सकते हैं तो आप पॉइंटर्स का भी उपयोग कर सकते हैं :) – Joey

+0

मुझे लगता है कि मेरा मुद्दा यह है कि निम्न स्तर का अमूर्त सी सी पॉइंटर्स, असुरक्षित और अनचेक वाली भाषा का हिस्सा है, सी # के उच्च स्तर से बाहर हो रहा है अमूर्त। – RedBlueThing

1

कच्ची गति के लिए, सी का उपयोग करें बिजली के लिए, सी ++ का उपयोग करें। .NET संगतता के लिए, सी # का उपयोग करें। वे सभी जटिल हैं क्योंकि भाषाएं जाती हैं; दशकों के क्रमिक वृद्धि के माध्यम से सी, सी ++ तेजी से वृद्धि के वर्षों के माध्यम से, और सी # माइक्रोसॉफ्ट की शक्ति के माध्यम से।

+0

एएच पर आधारित है, ऐसे कई मामले हैं जहां सी ++ सी से तेज है (std :: sort vs qsort एक स्पष्ट उदाहरण है)। Http://blogs.msdn.com/ricom/archive/2005/05/10/416151.aspx दिखाता है, सी # आम तौर पर भी साथ ही करता है। सादा सी # कोड से बेहतर प्रदर्शन करने के लिए सी/सी ++ प्राप्त करने में बहुत अधिक काम लगता है। – jalf

+0

सी # के लिए एकमात्र बिंदु ".net संगतता" के लिए है? चलो भी अब। – mmcdole

+0

@jalf: sry, लेकिन आपकी टिप्पणी सेब, संतरे और आलू की तुलना की तरह है। सी और सी ++ मोटे तौर पर एक ही गति (विभिन्न कोड/पुस्तकालयों को छोड़कर) हैं, जबकि सी # शायद पूर्व के जितना तेज नहीं हो सकता है। –

2

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

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

9

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

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

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

+0

क्या आप स्पष्ट कर सकते हैं "लेकिन सी ++ की जटिलता के पास कहीं नहीं"? यह जानना मुश्किल है कि, आपने जो लिखा है, वह अच्छा या बुरा है। मेरा मानना ​​है कि मुझे पता है कि आप क्या प्राप्त कर रहे हैं, लेकिन यह स्पष्ट नहीं है। –

+2

यह मेरी राय में न तो अच्छा है और न ही बुरा है, सी # सीखना आसान है और सी ++ के अंधेरे कोनों में नहीं है, लेकिन सी ++ में जटिलता के हर बिट के पीछे एक कारण है। – Eclipse

4

मेरे राय सी # है और ASP.NET विकास है कि वेब पक्षपाती है के लिए तीन में से सबसे अच्छा होगा।

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

यदि आवश्यक हो तो भी मैं सी ++ लिखता हूं, लेकिन यह आमतौर पर एक छोटी समस्या डोमेन के लिए होता है। जैसे सी # से पी/पुराने सी-स्टाइल डीएल के लिए आमंत्रित करें - कुछ चीजें जो सी # में कमजोर बेकार हैं, एक पुल के रूप में सी ++ COM ऑब्जेक्ट बनाने की हवा थी।

सी # के साथ अच्छी बात यह है कि आप विंडोज और कंसोल ऐप्स लिखने में आसानी से स्थानांतरित कर सकते हैं और सी # में रह सकते हैं। मोनो के साथ आप विंडोज तक भी सीमित नहीं हैं (हालांकि आप सीमित पुस्तकालयों तक सीमित हो सकते हैं)।

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

तो असली दुनिया परिप्रेक्ष्य से, सामान्य नियम के रूप में अनुरोध किए गए सी #, सी ++ और सी में से केवल एक चुनना, आप सी # के साथ रहना बेहतर हैं।

52

ध्यान रखें कि मैं ASFAC++B बोलता हूं। :) मैंने पहले सबसे महत्वपूर्ण अंतरंग कारक रखा है।

कूड़ा संग्रह

कूड़ा संग्रह (जीसी) इन भाषाओं के बीच अंतर करने में सबसे महत्वपूर्ण कारक है।

C और C++ जीसी साथ प्रयोग किया जा सकता है, यह है एक बोल्ट-ऑन बाद का विचार और साथ ही (the best known is here) काम करने के लिए नहीं किया जा सकता है - यह "परंपरागत" जिसका अर्थ है कि यह सब अप्रयुक्त स्मृति जमा नहीं कर सकता हो गया है।

सी # ग्राउंड अप से जीसी मंच पर काम करने के लिए बनाया गया है, मानक पुस्तकालयों ने भी इस तरह से डिजाइन किया है। यह डेवलपर उत्पादकता के लिए एक बिल्कुल मौलिक अंतर बनाता है जिसे विश्वास किया जाना चाहिए।

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

यह भी व्यापक विश्वास है कि जीसी को shared_ptr के साथ प्रतिस्थापित किया जा सकता है, लेकिन यह नहीं हो सकता है; विडंबना यह है कि एक बहु थ्रेडेड प्रोग्राम में, shared_ptr एक जीसी-आधारित प्रणाली से धीमा है।

ऐसे वातावरण हैं जो इतने मितव्ययी हैं कि जीसी व्यावहारिक नहीं है - लेकिन ये तेजी से दुर्लभ हैं। सेल फोन में आमतौर पर जीसी है। सीएलआर का जीसी जो सी # आमतौर पर चलता है, वह अत्याधुनिक प्रतीत होता है।

18 महीने पहले सी # को अपनाने के बाद से मैं एक प्रोफाइलर के साथ शुद्ध प्रदर्शन ट्यूनिंग के कई चरणों से गुजर चुका हूं, और जीसी इतना कुशल है कि यह कार्यक्रम के संचालन के दौरान व्यावहारिक रूप से अदृश्य है।

जीसी एक पैनसिया नहीं है, यह सभी प्रोग्रामिंग समस्याओं को हल नहीं करता है, यह केवल स्मृति आवंटन को साफ़ करता है, अगर आप बहुत बड़ी मेमोरी ब्लॉक आवंटित कर रहे हैं तो आपको अभी भी कुछ देखभाल करने की आवश्यकता होगी, और यह अभी भी एक पर्याप्त जटिल कार्यक्रम में स्मृति रिसाव के लिए क्या मात्रा हो सकती है - और फिर भी, उत्पादकता पर जीसी का प्रभाव यह एक पैनसिया के लिए एक बहुत करीब निकटता बनाता है!

अपरिभाषित व्यवहार

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

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

सी # इस सिद्धांत पर स्थापित किया गया है कि सभी संभावित संचालनों को परिभाषित व्यवहार होना चाहिए। सबसे बुरा जो हो सकता है वह एक अपवाद फेंक दिया जाता है। यह सॉफ्टवेयर निर्माण के अनुभव को पूरी तरह बदल देता है।

(वहाँ असुरक्षित मोड है, जो संकेत दिए गए हैं और इसलिए अपरिभाषित व्यवहार है, लेकिन वह दृढ़ता से सामान्य उपयोग के लिए हतोत्साहित किया जाता है - यह एम्बेडेड विधानसभा भाषा के रूप में अनुरूप के बारे में सोच।)

जटिलता

संदर्भ में जटिलता के, सी ++ को अलग किया जाना चाहिए, खासकर अगर हम जल्द ही मानकीकृत नए संस्करण पर विचार करते हैं। सी ++ जीसी को संभालने से कम, खुद को प्रभावी बनाने के लिए पूरी तरह से कर सकता है, और नतीजतन यह एक अद्भुत सीखने की वक्र है। भाषा डिजाइनर यह कहकर बहुत अधिक बहाना करते हैं कि "वे सुविधाएं केवल लाइब्रेरी लेखकों के लिए हैं, सामान्य उपयोगकर्ताओं के लिए नहीं हैं" - लेकिन किसी भी भाषा में वास्तव में प्रभावी होने के लिए, आपको अपने कोड को पुन: प्रयोज्य पुस्तकालयों के रूप में बनाना होगा। तो आप भाग नहीं सकते हैं।

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

सी भाषा को सरल रखता है ("कंपाइलर लिखना आसान है" के अर्थ में सरल), लेकिन यह कोडिंग तकनीक को अधिक आर्केन बनाता है।

ध्यान दें कि सभी नई भाषा विशेषताएं अतिरिक्त जटिलता के समान नहीं हैं। कुछ भाषा विशेषताओं को "सिंटेक्टिक चीनी" के रूप में वर्णित किया जाता है, क्योंकि वे कमजोर हैं कि संकलक आपके लिए फैलता है। हाल के वर्षों में सी # में वृद्धि के बारे में सोचने का यह एक अच्छा तरीका है। भाषा मानक भी लंबे समय तक अनुवाद देकर कुछ विशेषताओं को निर्दिष्ट करता है, उदा। using कथन try/finally में फैला हुआ है।

एक बिंदु पर, सी ++ टेम्पलेट्स को उसी तरह से सोचना संभव था। लेकिन वे तब से इतने शक्तिशाली हो गए हैं कि वे अब अपने enthusiastic user communities and idioms के साथ भाषा के एक अलग अलग आयाम का आधार बन गए हैं।

पुस्तकालय

C और C++ के बारे में अजीब बात यह है कि वे पहले से संकलित पुस्तकालय का एक मानक विनिमेय रूप नहीं है। अपनी परियोजना में किसी और के कोड को एकीकृत करना हमेशा थोड़ा सा स्पष्ट रूप से होता है, इस बारे में अस्पष्ट निर्णय किए जाने के साथ कि आप इसे कैसे जोड़ रहे हैं।

इसके अलावा, मानक पुस्तकालय बेहद बुनियादी है - सी ++ में डेटा संरचनाओं का एक पूरा सेट है और तारों का प्रतिनिधित्व करने का एक तरीका है (std::string), लेकिन यह अभी भी न्यूनतम है। निर्देशिका में फ़ाइलों की सूची खोजने का कोई मानक तरीका है? आश्चर्यजनक रूप से, नहीं! एक्सएमएल पार्सिंग या जेनरेट करने के लिए मानक लाइब्रेरी समर्थन है? नहीं। डेटाबेस तक पहुंचने के बारे में क्या? गंभीर हो जाओ! एक वेब साइट बैक एंड लिखना? क्या तुम पागल हो? आदि

तो आपको आगे की ओर शिकार करना होगा। एक्सएमएल के लिए, Xerces आज़माएं। लेकिन क्या यह तारों का प्रतिनिधित्व करने के लिए std::string का उपयोग करता है? बिलकूल नही!

और क्या इन सभी तृतीय पक्ष पुस्तकालयों के वर्ग और कार्यों का नामकरण करने के लिए अपने स्वयं के विचित्र रीति-रिवाज हैं? आप बेट्चा हो!

सी # की स्थिति और अधिक अलग नहीं हो सकती; मौलिक सिद्धांत शुरुआत से ही थे, इसलिए सबकुछ खूबसूरती से संचालित होता है (और क्योंकि मूलभूत सिद्धांत सीएलआर द्वारा प्रदान किए जाते हैं, वहां क्रॉस-भाषा समर्थन होता है)।

यह बिल्कुल सही नहीं है; जेनेरिक शुरुआत से ही हो सकते थे लेकिन ऐसा नहीं था, जो कुछ पुराने पुस्तकालयों पर एक दृश्यमान निशान छोड़ देता है; लेकिन यह बाहरी रूप से ठीक करने के लिए आमतौर पर तुच्छ है। इसके अलावा जावा से कई लोकप्रिय पुस्तकालयों को पोर्ट किया गया है, जो पहले जैसा दिखता है उतना अच्छा नहीं है।

क्लोजर (स्थानीय चर पर कब्जा के साथ बेनामी तरीके)

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

सी ++ के बारे में मनोरंजक बात यह है कि इसकी मानक लाइब्रेरी को डिज़ाइन किया गया था जैसे कि भाषा में कंटेनर प्रकार, कंटेनर प्रकार, <algorithm>, <functional>) उपलब्ध थे। फिर दस साल बीत गए, और अब उन्हें अंत में जोड़ा जा रहा है! उनके पास एक बड़ा प्रभाव होगा (हालांकि, जैसा ऊपर बताया गया है, वे अव्यवस्थित व्यवहार को रिसाव करते हैं)।

सी # और जावास्क्रिप्ट सबसे व्यापक रूप से उपयोग की जाने वाली भाषाएं हैं जिनमें बंद "idiomatically स्थापित" हैं। (उन भाषाओं के बीच बड़ा अंतर यह है कि सी # स्थिर रूप से टाइप किया गया है जबकि जावास्क्रिप्ट गतिशील रूप से टाइप किया गया है)।

प्लेटफार्म समर्थन

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

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

+3

डाउनवॉटर - कृपया टिप्पणी करें! –

+1

यह एक अच्छा जवाब है, विशेष रूप से अपरिभाषित व्यवहार और पुस्तकालयों के साथ समस्या के बारे में हिस्सा। ये दो चीजें सी ++ दुनिया में इतनी परेशानी का कारण बनती हैं, फिर भी कभी-कभी शुरुआती उन्हें एक लाभ के रूप में देखते हैं और उनकी रक्षा करते हैं। – compie

+1

(0) सी # रास्ता पार मंच नहीं है, इसके बारे में भूल जाओ। (1) मोनो अब सी # "क्रॉस प्लेटफॉर्म" बनाने का तरीका है क्योंकि यह बहुत पीछे है। नेट। (2) सी # एक महत्वपूर्ण बात की कमी RAII (और नहीं, इसका उपयोग करके इसे प्रतिस्थापित नहीं किया जाता है)। (3) सी # नामक जीसी में एक विशाल अपरिभाषित-गैर-निर्धारक व्यवहार है। (4) पुस्तकालयों के बारे में ... आपके इच्छित कार्यों को करने के लिए पर्याप्त टूलकिट हैं ... लेकिन हाँ, ऐसे में एक और है ... यह choise का सवाल है। – Artyom

1

सी - एक पुरानी प्रोग्रामिंग भाषा जिसे हाथ-ऑन के रूप में वर्णित किया गया है। प्रोग्रामर के रूप में आपको प्रोग्राम को सब कुछ करने के लिए बताना होगा। यह भाषा आपको लगभग कुछ भी करने देगी। यह ऑब्जेक्ट ओरिएंटेड कोड का समर्थन नहीं करता है। इस प्रकार कोई कक्षा नहीं।

सी ++ - सी के प्रति एक विस्तार भाषा सी कोड ++ में वृद्धि का मतलब है 1. इस प्रकार सी ++ सी से बेहतर है। यह अत्यधिक नियंत्रित ऑब्जेक्ट ओरिएंटेड कोड की अनुमति देता है। एक बार फिर भाषा पर बहुत हाथ जो बहुत विस्तार से जाता है।

सी # - पूर्ण ऑब्जेक्ट ओरिएंटेड कोड सी/सी ++ कोड की शैली जैसा दिखता है। यह वास्तव में जावा के करीब है। सी # सी शैली भाषाओं का नवीनतम संस्करण है और वेब अनुप्रयोगों के विकास के लिए बहुत अच्छा है।

-1

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

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