खेल प्रोग्रामिंग के लिए सी ++ के साथ प्रतिस्पर्धा


21

मुझे इस बात की उत्सुकता है कि क्यों C ++ खेल के विकास के लिए इतना लोकप्रिय है, और इसके बजाय अन्य भाषाओं के लिए नहीं। मुझे पता है कि आप इसके साथ बहुत तेज़ कोड बना सकते हैं, लेकिन वास्तव में ऐसा क्या है जो इसे लोकप्रिय बनाता है?

क्या यह सिर्फ इसलिए कि यह तेज है? क्या यह भाषा की कुछ अन्य विशेषता है, जैसे OO प्रतिमान या पोर्टेबिलिटी? क्या यह उन सभी पुस्तकालयों के कारण है जो समय के साथ बनाए गए हैं? या इन सभी (और अन्य) कारणों के कुछ संयोजन?

अगर कोई मुझे इस पर भर सकता है, तो मुझे बहुत खुशी होगी। :-)


7
गति मेरे लिए पर्याप्त है, खासकर जब से भाषा के बारे में हर किसी की शिकायत वास्तव में मेरे लिए मायने नहीं रखती है।
बेंजामिन लिंडले

एक त्वरित अनुमान: अधिकांश गेम विंडोज के लिए लिखे गए हैं। C और C ++ भाषाओं को Microsoft द्वारा भारी समर्थन दिया गया है। और अंत में C ++ को OOP और टेम्पलेट मेटाप्रोग्रामिंग के कारण पसंद किया जाता है।

@ मैट थैंक्स, पता नहीं था कि यह अस्तित्व में है। क्या मैं विषय को वहां स्थानांतरित कर सकता हूं, या क्या मुझे इसे हटा देना चाहिए और इसे फिर से बनाना होगा?

यह पहले ही कई बार पूछा जा चुका है।
ज़ैन लिंक्स

1
@ बैंजामिन: तब मैंने हिम्मत की कि आपने सी ++ में पर्याप्त नहीं लिखा है, या आपने पायथन (या लिनक्यू के साथ सी #) जैसी अधिक अभिव्यंजक भाषा का उपयोग नहीं किया है। हालाँकि, अगर किसी पागल कारण के लिए आप 20 लाइनों का कोड लिखना पसंद करते हैं , जो अन्य भाषाओं में 1, C ++ के बेहद खराब व्याकरण के लिए कर सकते हैं, तो इसका मतलब है कि प्रोग्राम्स को उनकी तुलना में संकलन करने में अधिक समय लगता है, और उचित IDE टूल (रिफैक्टरिंग, आदि)। और अधिक कठिन है, अगर असंभव नहीं है, बनाने के लिए।
ब्लूराजा - डैनी पफ्लुगुफ्ट

जवाबों:


29

कई कारण:

  • एक बड़ा जिसे आपने याद किया: यह पोर्टेबल है, आपके गेम इंजन को iOS, XBOX, PS3, जो भी हो, सरल बनाना
  • ये तेज़ है
  • सभी एसडीके मूल रूप से इसका समर्थन करते हैं
  • उपलब्ध पुस्तकालयों के बहुत सारे
  • गेम लिखने वाला हर कोई इसे जानता है, इसलिए अपनी टीम के लिए अनुभवी गेम देवों को किराए पर लेना आसान है
  • यह लुआ की तरह एक खेल इंजन पटकथा भाषा एम्बेड करने के लिए तुच्छ है

ठीक है, आपके जवाबों के लिए सभी को धन्यवाद, आपने मेरे द्वारा सोचे गए सभी चीजों को कवर किया है। :-)
कासम् १

14

कुछ कारण हैं, कि मैं @Ghamham के अलावा क्या उल्लेख करना चाहता हूं।

  • लिगेसी कोड - कई स्टूडियोज में बहुत सारे C ++ कोड होते हैं, जो आपके पुस्तकालयों का उल्लेख करते हैं।
  • सी ++ वास्तव में एक उच्च-स्तरीय असेंबलर है, और इसमें हार्डवेयर की सीधी पहुंच है (जैसा कि आप सीधे ऑपरेटिंग सिस्टम के शीर्ष पर चल सकते हैं) और काफी तेज है। यदि आप चाहते हैं, तो C ++ में आप इंस्ट्रक्शन लेवल कंट्रोल के लिए असेंबली लैंग्वेज में सीधे ड्रॉप कर सकते हैं (ऐसा नहीं है कि यह हमेशा बुद्धिमान हो, इसका जावा, C #, पायथन, आदि के साथ संभव नहीं है)
  • DirectX और OpenGL मूल रूप से C ++ का समर्थन करते हैं, अधिकांश अन्य भाषाओं में अंतर्निहित परतों के माध्यम से अंतर्निहित पुस्तकालयों के लिए "बाइंडिंग" है, यह कहने के लिए कि वे तेज नहीं हैं या एक ही काम नहीं कर सकते हैं, लेकिन यह सॉफ्टवेयर की एक परत जोड़ता है आपका गेम और हार्डवेयर।
  • जैसा कि @Ghamham उल्लेख करता है, बहुत सारे प्रोग्रामर इसे जानते हैं, इसलिए इसका आसान अनुभव अनुभवी डेवलपर्स को खोजने के लिए है, और इसके पोर्टेबल भी हैं। सी # की तुलना में जो .NET फ्रेमवर्क पर अटक गया है (इसमें मोनो है, लेकिन यह आमतौर पर माइक्रोसॉफ्ट के कार्यान्वयन के पीछे एक पीढ़ी को पीछे छोड़ देता है। ।)

क्या आपका मतलब निम्न स्तर का नहीं है?
झॉकिंग

5
सी ++ एक low-levelभाषा है; लेकिन एक high-levelअसेंबलर, IMO।
नैट

3
मैं असहमत हूं। C ++ एक उच्च-स्तरीय भाषा है, जिसमें C (जो एक निम्न-स्तरीय भाषा है) पर वापस आने की सुविधा है।
फू

7
C ++ एक उच्च स्तरीय भाषा है, जैसा कि C. असेंबली निम्न स्तर है। अब, C ++ C से उच्च स्तर है, जैसे C # C ++ से अधिक है और Ruby / Python C # से अधिक है।
एए ग्रेप्स

4
क्यों विरासत कोड को अपदस्थ किया जाना चाहिए (मूल्यह्रास नहीं)? "लिगेसी कोड" का मतलब सिर्फ इतना है कि यह पुराना है, बुरा नहीं है।

8

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

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


3

C ++ में आप फ़ंक्शन समाप्त होने के बाद गायब होने वाले स्थानीय चर आवंटित कर सकते हैं। आमतौर पर, इन्हें एक स्टैक पर आवंटित किया जाता है।

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

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

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


1
-1 (अगर मैं कर सकता था) - जावा और सी # दोनों में स्टैक पर स्थानीय प्राइमेटिव्स आवंटित किए जाते हैं, और सी # में आप स्टैक-एलोकेट बना सकते हैं structs। इस बिंदु पर, गति में बेहद मामूली वृद्धि आप लगभग एक भाषा को दूसरी भाषा में सही ठहराने के लिए पर्याप्त नहीं हैं । असली कारण @ ग्राहम पर्क द्वारा बताया गया है: यह वही है जो गेम डेवलपर्स को पता है, इसलिए यह है कि नए गेम डेवलपर्स क्या सीखते हैं, और नए एसडीके के लिए क्या लक्षित है। वहाँ बहुत सारी भाषाएँ हैं (उदा। गो) जो बस उतनी ही तेज़ या तेज़ हैं, और लगभग लिखने के लिए असुविधाजनक नहीं हैं ।
ब्लूराजा - डैनी पीफ्लुगुएफ्ट

स्टैक आवंटन में C ++ बहुत अच्छा नहीं है; वास्तव में, स्टैक पर एसटीएल-संगत वस्तुओं को आवंटित करना बहुत कठिन है। उदाहरण के लिए मैंने जिस अंतिम बड़े इंजन पर काम किया था वह C में था, और हमारे पास एक स्ट्रिंग थी जिसे आप कुछ निश्चित आकार (आमतौर पर NK) पर स्टैक पर शुरू कर सकते थे। यदि यह अतीत हो गया कि यह पारदर्शी रूप से ढेर में चला गया। आप कुछ इसी तरह की बातें कर सकते हैं: सी + + में स्ट्रिंग कस्टम एलोकेटर्स, लेकिन सही पाने के लिए कोड बहुत पेचीदा है।

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

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

2
नहीं। C ++ की गति लाभ ढेर आवंटन के लिए अपने स्वयं के कस्टम-लिखित मेमोरी प्रबंधक का उपयोग करने की क्षमता के कारण है । प्रत्येक साने भाषा स्टैक पर स्थानीय लोगों को आवंटित करती है।
नेवरमाइंड

3

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

एक बार जब गेम परिचित हार्डवेयर पर बस गए, तो सी कंपाइलर उपलब्ध हो गए और कुछ ही समय में सभी गेम सी में लिखे गए।

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

अब ऐसा लगता है कि कंप्यूटर कुछ साल पहले की तुलना में 1000 गुना तेज हैं, एक उच्च स्तरीय भाषा सी को अप्रचलित बनाने के विकास के समय ($) को कम कर देगी।

ऐसा इसलिए नहीं हुआ है क्योंकि गेम के खरीदार जानते हैं कि हार्डवेयर 1000x बेहतर है, और एक ऐसे गेम के लिए अपने डॉलर का व्यापार करना चाहते हैं जो 1000x बेहतर दिखता है और लगता है। यह उस सिस्टम से स्लैक को हटा देता है जो उच्च स्तरीय भाषा का उपभोग करेगा।

खेलों में प्रदर्शन की आवश्यकताएं क्रूर हैं। बिना असफल हुए 33ms (या 16ms!) के तहत ग्राफिक्स का एक नया फ्रेम प्रदान किया जाना चाहिए। सब कुछ हार्डवेयर का हिसाब होना चाहिए, ताकि इस बजट को पूरा किया जा सके। कोई भी भाषा जो बंद हो जाती है और हार्डवेयर के साथ कुछ ऐसा करती है जो प्रोग्रामर को समझ में नहीं आता है या उम्मीद नहीं करता है कि यह इस बजट को पूरा करने के लिए बहुत कठिन है। यह किसी भी उच्च-स्तर के खिलाफ एक स्वचालित माइनस है।

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

* यदि कोई पॉइंटर कैशे मिस नहीं करता है, तो इसे स्टोर करने के लिए 32 बिट्स क्यों खर्च करें? यदि कोई पॉइंटर कैशे मिस कर देता है, तो उस कैशे मिस से छुटकारा पाएं।


1
"सी ++ के लिए कोई नई सुविधा नहीं है जो मुझे लगता है कि खेल में सुधार करता है।" जबरदस्त हंसी? OOP? humanव्युत्पन्न playerऔर के साथ एक वर्ग enemy?
orlp

2
@ नाइटक्रैकर: बेसिक है-एक विरासत सी में ठीक काम करता है; आप जिस संबंध का वर्णन करते हैं वह बेहतर प्रदर्शन और स्वच्छता कारणों के लिए वैसे भी लागू होता है।

3
एक बढ़ती हुई आम सहमति है कि C ++ की OOP सुविधाएँ खेलों के लिए उपयुक्त नहीं हैं, क्योंकि ये सुविधाएँ मान्यताओं पर काम करती हैं जो कैश प्रदर्शन के लिए शत्रुतापूर्ण हैं।
bmcnett

यहां तक ​​कि अगर आप मानते हैं कि सी ++ सी पर कोई लाभ नहीं देता है, तो आपको निश्चित रूप से यह पहचानना चाहिए कि सी पर वापसी सी ++ पर कोई लाभ नहीं प्रदान करता है।
डैन ओल्सन

@Dan A C पर लाभ यह प्रदान करता है कि "बेस्ट प्रैक्टिस" जैसे कि टेम्प्लेट या OOP का उपयोग नहीं करना, एक छड़ी के साथ जूनियर प्रोग्रामर का पीछा करने के बजाय संकलन-समय त्रुटियों द्वारा लागू किया जाता है। इसके अलावा, क्योंकि भाषा सरल रूप से संकलक है और डिबगर रखरखाव सस्ता है, भी।
bmcnett

3

प्रत्येक प्रोग्रामिंग भाषाओं में कई कारकों में ताकत और कमजोरियां होती हैं। इन कारकों के उदाहरण हैं:

  • एक विशेष मंच पर स्पीड
  • एक विशेष मंच पर स्मृति उपयोग
  • क्या कार्यक्षमता यह अधिक आसानी से उजागर करता है
  • क्या प्लेटफार्मों उस पर मौजूद है
  • क्या विचार एक प्रोग्रामर-बोर्ड पर लेने के लिए है

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

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

सी ++ बहुत अच्छी तरह से इन दो मुख्य कारक है फिट बैठता है। आपके पास ऑब्जेक्ट्स की स्पष्टता के साथ असेंबली या C कोड के प्रदर्शन लाभ हो सकते हैं। यह देखने के लिए कि यह खेलों के लिए एक स्वाभाविक फिट क्यों है, कुछ अन्य भाषा विकल्पों के साथ तुलना करें:

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

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


2

विरासत और गति।

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

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


2

यदि आप कंसोल के लिए विकसित कर रहे हैं, तो आपके पास कोई विकल्प नहीं है: पेशेवर एसडीके केवल सी ++ फ्लेवर में आते हैं। आमतौर पर उनके पास ज्यादातर चीजों की सी एक्सेस भी होती है।

क्योंकि कई डेवलपर कंसोल्स + पीसी हैं, यह उनके सभी पीसी को एक ही भाषा में काम करने और सीधे तकनीक साझा करने के लिए समझ में आता है।

क्योंकि यही वह जगह है जहां समर्थक उद्योग रहता है, और अधिकांश लोग उसी का हिस्सा बनना चाहते हैं, अधिकांश गेम प्रोग्रामर C ++ प्रोग्रामर हैं।

क्योंकि यह सब होता है, ज्यादातर इंजन डेवलपर्स सी ++ डेवलपर्स भी होते हैं, इसलिए जब पेशेवर ग्रेड इंजनों का मूल्यांकन किया जाता है तो आपके सभी विकल्प C ++ होंगे।

यह सब एक बड़ा आत्मनिर्भर इंजन है। इसे बाधित करने के लिए केवल तकनीकी प्रगति से अधिक की आवश्यकता होगी।


2

FWIW: C # गेम डेवलपमेंट के लिए लोकप्रियता हासिल कर रहा है। देखें Miguel de Icaza के ब्लॉग पोस्ट । बहुत दिलचस्प पढ़ा, IMHO।


2
हमेशा की तरह, मिगुएल ने अपनी पसंदीदा (आमतौर पर सीमांत) प्रौद्योगिकियों को धक्का दिया, जबकि सी # वास्तव में उद्योग में एक बड़ा खिलाड़ी बन गया है, जैसे कि एक्सएनए।

2

हालाँकि, मैं काफी हद तक एंटी-सी, सी और सी ++ हूं, लेकिन एक चीज जो उनके पास है वह यह है कि जिन अन्य भाषाओं पर यह चल रहा है, उन पर कुछ अन्य भाषाओं का पूरा नियंत्रण है, आप निश्चित रूप से यह सुनिश्चित कर सकते हैं कि हर समय क्या होगा, नहीं जीसी, कोई glitches।

यह इन दिनों उतना महत्वपूर्ण नहीं है, लेकिन यह कमज़ोर प्लेटफार्मों के लिए हो सकता है।

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

तो इस बिंदु पर मैं कहूंगा कि यह ज्यादातर जड़ता और गर्भाधान है कि असली खेल हमेशा C / C ++ में होते हैं, हालांकि iPhone और कंसोल के लिए "पोर्ट" करने की क्षमता महत्वपूर्ण है (भले ही मैं काफी यकीन कर रहा हूं गेम का UI विंडोज और एक्सबॉक्स के बीच पोर्ट करने के लिए बहुत प्रयास करता है)।


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

@ क्रिस: गैर-गेम प्रोग्रामर के लिए इसका वर्णन करने का सबसे अच्छा तरीका यह है कि गेम एक ऐसा डोमेन है जहां गति एक प्रतिस्पर्धात्मक लाभ है। यदि आपका वर्ड प्रोसेसर 5 सेकंड में शुरू होता है, जहां एमएस वर्ड 10 लेता है, या 0.1 सेकंड में रिफॉल होता है जहां वर्ड 0.2 लेता है, तो यह बेकार है। लेकिन अगर आपका खेल 10% अधिक अंशों को भी पंप कर सकता है या एक अधिक विस्तृत चरित्र दिखा सकता है, तो यह एक बड़ा प्रतिस्पर्धी लाभ हो सकता है।

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

आह, लेकिन यह एक गिरावट है कि विधानसभा में कोडिंग तेज है: वर्तमान चिप्स पर्याप्त जटिल हैं कि एक प्रोग्रामर के लिए लगातार कंपाइलर से बेहतर प्रदर्शन करना मुश्किल है। केवल PS3 पर SPUs जैसे अधिक विवश डोमेन में, GPU पर आंतरिक भौतिकी लूप और शेड्स अभी भी स्पष्ट लाभ हैं। C ++ वास्तव में वर्तमान में मधुर स्थान है, इस चेतावनी के साथ कि OOP हमेशा सबसे अच्छा विकल्प नहीं है: चल रही संरचना Arrays बनाम Array of संरचनाएं चर्चा वास्तव में एक भाषा चर्चा नहीं है, लेकिन C ++ आपको स्वाभाविक रूप से AoS की ओर ले जाती है; कभी-कभी ... आप वास्तव में केवल सी चाहते हैं
क्रिस सुबागियो

कोडांतरक और C / C ++ के बीच प्रोग्रामर दक्षता में कदम भी C और C ++, या C ++ और C # / जावा के बीच प्रोग्रामर दक्षता में कदम से अधिक परिमाण का एक आदेश है। फ्रेड ब्रूक्स ने 25 साल पहले यह बताया था।
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.