गेम डेवलपर्स के लिए C / C ++ को क्यों पसंद किया जाता है?


14

कुछ लोग कहते हैं कि यह डेवलपर्स को अधिक नियंत्रण प्रदान करता है, लेकिन यह क्या ठीक है जिसे C ++ के माध्यम से नियंत्रित किया जा सकता है, जिसका उपयोग करके नियंत्रित नहीं किया जा सकता है, उदाहरण के लिए, जावा?

जवाबों:


21

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

जावा एक कचरा एकत्रित भाषा है। आपकी स्मृति पर आपका सीधा नियंत्रण नहीं है। आप मेमोरी के नए हिस्से आवंटित कर सकते हैं, लेकिन आपके डिलीट होने पर (फाइन) नियंत्रण नहीं होता है। कचरा संग्रहकर्ता प्रत्येक मेमोरी को आपके हर एक्स फ्रेम को आवंटित करता है और यह निर्धारित करता है कि यह कचरा है या अभी भी उपयोग किया जा रहा है।

खेलों के लिए यह विनाशकारी हो सकता है। हर कुछ तख्ते कुछ कचरा कलेक्टर जाँच के लिए आता है आपके द्वारा किए गए हर एक आवंटन की अगर यह अभी भी उपयोग किया जा रहा है? एक मंदी के बारे में बात करो!

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

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

मैं यह नहीं कह रहा हूं: जावा का उपयोग न करें। मैं कह रहा हूं: आप जावा का उपयोग क्यों कर रहे हैं, इसके बारे में सोचें। Minecraft जावा में बनाया गया था, इसलिए जावा में गेम बनाना निश्चित रूप से संभव है। लेकिन क्या यह एक बेहतर खेल होता, इसे C ++ में बनाया गया होता? खैर, यह निश्चित रूप से बड़े तीन (विंडोज, मैकओएस, लिनक्स) पर चलने के लिए इतना सस्ता नहीं था, लेकिन फिर भी, इसके विकास में बहुत सारे प्लेटफ़ॉर्म-विशिष्ट बगों का सामना करना पड़ा, जो कि जावा को सुचारू नहीं कर सके। ऊपर।

प्रोग्रामर्स की शुरुआत के लिए अब C ++ फ्रेमवर्क के टन हैं। वास्तव में इसे सीखने का कोई बहाना नहीं है, खासकर यदि आप उद्योग में अपना करियर आगे बढ़ाना चाहते हैं।


1
बस एक नाइटपिक, लेकिन अधिकांश ऑपरेटिंग वातावरण के तहत देशी कोड एक आभासी मशीन में चलता है। जावा वर्चुअल मशीन के अंदर एक वर्चुअल मशीन में चलता है।
स्काइलर सालेह

1
@ आरटीएस: यह ऑप-टू - माइक्रो-ऑप ट्रांसलेशन को वर्चुअल मशीन कहने के लिए थोड़ा खिंचाव है, यदि आप इसे देख रहे हैं।

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

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

2

संक्षिप्त उत्तर: C ++ देशी कोड के लिए संकलित करता है, इसलिए प्रदर्शन डेवलपर पर निर्भर है, न कि रनटाइम या वीएम पर।

लंबा जवाब:

C ++ का "तेज़" होने का C ++ से कोई लेना-देना नहीं है। फिलहाल, यह बहुत कम भाषाओं में से एक है जो उन उपकरणों द्वारा समर्थित है जो स्टैंडअलोन, कई प्लेटफार्मों के लिए मूल कोड का उत्पादन करते हैं।

दिन में वापस, आप C, C ++, BASIC / 2, डेल्फी, आदि का उपयोग कर सकते हैं, और कुशल, फ्रीस्टैंडिंग निष्पादन योग्य प्राप्त कर सकते हैं। भाषा का चुनाव व्यक्तिगत पसंद और बाजार की शक्तियों का विषय था।

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

बोरलैंड के पास यह अधिकार था: कई भाषाएं जिन्हें पार्स किया गया था, पहले अनुकूलन लागू किए गए, फिर एक आम बैकएंड कंपाइलर और लिंकर को पास किया गया। जो एलएलवीएम की प्रमुख उपलब्धियों में से एक है।

जावा को इस तरह से संरचित किया गया है कि जेवीएम के बिना इसे लागू करना बहुत मुश्किल होगा। विचित्र रूप से पर्याप्त, सी #, आमतौर पर, और गलत तरीके से, जावा के लगभग बराबर माना जाता है, पहले से ही आईओएस सहित कई प्लेटफार्मों पर मूल कोड के लिए संकलित करता है।

मेरी क्रिसमस सूची में सबसे ऊपर? C ++ में गुण, वास्तविक अपवाद हैंडलिंग और वास्तविक कार्य बहुरूपता को जोड़ने और वापस जाने के लिए एक टाइम मशीन, और f "d एरो सिंटैक्स क्रैप से छुटकारा पाएं जो पार्सर अपने आप पता लगा सकता है। मैंने उस 10 वर्षों के लिए एक पूर्वसूचक लिखा था। पहले क्योंकि यह मूर्खतापूर्ण है।


क्या आपका मतलब अप्रत्यक्ष सदस्य पहुंच है (जैसा कि h-> x)? इसे हटाने से हैंडल और स्मार्ट पॉइंटर प्रकार कम उपयोगी होंगे। यदि आप इसे कच्चे संकेतकर्ताओं के लिए बदलने का तर्क देते हैं, तो आपने भाषा को कम सुसंगत बना दिया है।
लार्स विकलंड

1
C ++ के बहुरूपता के बारे में क्या काम नहीं करता है?
केसी

@LarsViklund हां, मेरा यही मतलब है। लेकिन, जब पता, डेरेफेरेंस और मेंबर ऑपरेटर्स ((, *, ::, -> ...) सभी के अलग-अलग अर्थ होते हैं, तो अधिकांश समय ड्रॉज्ड रिजल्ट को संदर्भ से अलग करना संभव होता है। चीजों को सरलीकृत किया जा सकता था, जैसा कि अन्य भाषाओं में किया जाता है। एक मामूली चिपके बिंदु, लेकिन एक जो कोड जटिलता को बढ़ाने की क्षमता रखता है (और इस प्रकार देव समय और लागत)।
डी जुवे
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.