उद्योग के खेल में मेरा मतलब है क्वेक, कॉड आदि।
उद्योग के खेल में मेरा मतलब है क्वेक, कॉड आदि।
जवाबों:
एक अर्थ में, C ++ को वास्तव में प्रतिस्थापित किया जा रहा है - न केवल C #, बल्कि अन्य भाषाओं के एक समूह द्वारा। लेकिन अगर आप पूछते हैं, क्या यह पूरी तरह से बदल रहा है - तो इसका जवाब निश्चित रूप से नहीं है ।
ऐसा इसलिए है क्योंकि पारंपरिक रूप से C ++ का उपयोग दो क्षमताओं में किया जाता है। सबसे पहले, गेम इंजन बनाने के लिए : निम्न-स्तरीय घटक जो संसाधनों को लोड करते हैं, स्क्रीन पर पॉलीगॉन को धक्का देते हैं और भौतिकी सिमुलेशन में संख्याओं को क्रंच करते हैं। दूसरा, गेम लॉजिक को कोड करने के लिए : गेमप्ले बनाने वाले वास्तविक नियम।
इस दूसरी क्षमता के लिए C ++ के मजबूत बिंदुओं (जैसे निम्न-स्तरीय विवरण पर पूर्ण नियंत्रण) की आवश्यकता नहीं है, लेकिन इसकी कमजोरियों (जैसे बग-प्रोन हैंड-कोडेड मेमोरी मैनेजमेंट) से ग्रस्त है। और इस दूसरी क्षमता में C ++ को अलग-अलग स्क्रिप्टिंग भाषाओं द्वारा प्रतिस्थापित किया जा रहा है। बहुत सारे डेवलपर्स लुआ का उपयोग करते हैं; कुछ अजगर का उपयोग करें। लेकिन अगर कोई CLI प्लेटफॉर्म उपलब्ध है, तो .NET या मोनो के रूप में, यह एक महान स्क्रिप्टिंग होस्ट उम्मीदवार प्रस्तुत करता है। ये प्लेटफ़ॉर्म काफी तेज़, विश्वसनीय हैं, एक व्यापक रूप से ज्ञात भाषा (C #) और एक व्यापक बेस क्लास लाइब्रेरी प्रदान करते हैं। आइए उपकरणों को न भूलें: एमएस विज़ुअल स्टूडियो और शार्पव्यूड / मोनोडेवलप दुनिया का सबसे अच्छा आईडीई नहीं हो सकता है, लेकिन वे काफी अच्छे हैं।
उस ने कहा, खेल इंजन C # (या Lua, या उस मामले के लिए पायथन) में लिखा नहीं जा रहा है। क्यूं कर? क्योंकि वे अभी पर्याप्त उपवास नहीं कर रहे हैं।
कई लोकप्रिय मान्यताओं के विपरीत, आज का सबसे बड़ा प्रदर्शन स्मृति विलंबता के कारण है । इसका मतलब है कि मेमोरी एक्सेस करना गंभीर व्यवसाय है। और प्रबंधित भाषाएँ उपयोगकर्ता को मेमोरी एक्सेस को नियंत्रित करने की अनुमति नहीं देती हैं - यही कारण है कि वे पहले स्थान पर "प्रबंधित" हैं। इसलिए, कोई भी प्रबंधित भाषा वास्तव में तेज़ गेम इंजन लिखने की अनुमति नहीं देगी। वास्तव में, सभी बड़े "C #" इंजन जो मैं सोच सकता हूं - XNA, MOGRE, यूनिटी - मूल C ++ कोड पर आधारित हैं ; लेकिन सी # में खेल तर्क लिखने की अनुमति दें।
इसे योग करने के लिए : C # का उपयोग C ++ या अन्य भाषाओं के स्थान पर किया जाएगा। लेकिन यह कभी भी C ++ की जगह नहीं लेगा, कम से कम जब तक कोई व्यक्ति विलंबता-मुक्त, त्वरित-पहुंच मेमोरी का आविष्कार नहीं करता है।
भाषा की पसंद मंच पर बहुत अधिक निर्भर करती है। अभी यह वास्तव में संभावना नहीं है कि कुछ भी लेकिन एक Microsoft प्लेटफ़ॉर्म वास्तव में .NET के कार्यान्वयन के रूप में आवश्यकता होगी।
पारंपरिक ज्ञान का कहना है कि एक छोटे मंच को प्रदर्शन करने के लिए धातु के करीब होने की आवश्यकता होगी, लेकिन दूसरी ओर, प्रबंधित प्लेटफ़ॉर्म सुरक्षित हैं । शायद यही कारण है कि विंडोज फोन 7 आपको .NET का उपयोग करने के लिए मजबूर करता है।
यह निश्चित रूप से दिलचस्प होगा अगर एक नए Xbox को एक प्रबंधित प्लेटफ़ॉर्म की आवश्यकता होती है। यदि किसी फोन का हार्डवेयर उसे संभाल सकता है (और वह ऐसा करता है), मैं निश्चित रूप से उन्हें पूर्ण आकार के कंसोल पर इसका उपयोग करते हुए देख सकता था। यह कंसोल इकोसिस्टम को काफी उभारेगा क्योंकि स्क्रिप्टिंग भाषा में अपने सभी गेम कोड को लिखे बिना क्रॉस-प्लेटफॉर्म गेम लिखना कठिन होगा। अगर ऐसा है, तो C # C ++ को प्रतिस्थापित नहीं करेगा , लेकिन यह हाथों-हाथ चलेगा।
अभी आप मोनो को एक स्क्रिप्टिंग बैक एंड के रूप में उपयोग कर सकते हैं (एकता क्या करती है) के समान है, लेकिन मुझे लगता है कि अधिकांश इंजन निर्माता या तो अपना रोल करना चाहते हैं, या सी # की तुलना में लूआ या पायथन जैसे कुछ अधिक कॉम्पैक्ट का उपयोग करना चाहते हैं।
किसी भी तरह से, यह सही काम के लिए सही उपकरण के बारे में है। आपको वास्तव में वैसे भी दोनों भाषाओं को सीखना चाहिए, क्योंकि C # से कुछ चीजों को करना आसान हो जाता है (उपकरण विकास, सर्वर विकास संभवतः, आदि), और आप कुछ मामलों में C ++ का उपयोग नहीं कर सकते हैं।
इसकी संभावना नहीं है। C ++ को निम्न स्तर का होने का लाभ है ताकि डेवलपर्स वास्तव में सबसे अच्छे प्रदर्शन को प्राप्त करने के लिए सबसे बारीक विवरण को मोड़ सकें।
C # और .NET के साथ आपके पास कचरा संग्रह होता है जो बहुत उपयोगी होता है, लेकिन जब सीमित मेमोरी और रिसॉइसेस (पोर्टेबल कंसोल और कुछ हद तक होम कंसोल) के साथ प्लेटफार्मों के साथ काम करते हैं तो आपको सबसे अच्छा उपयोग करने के लिए मेमोरी पर अधिक से अधिक नियंत्रण रखने की आवश्यकता होती है संसाधनों का। आप के लिए स्मृति आवंटित करने और मुक्त करने के लिए प्रबंधित भाषाओं की अनुमति देने से आपको सबसे अधिक समस्या होगी।
गति भी एक मुद्दा है (हालांकि शायद इतना कम है)। समय के साथ, मुझे यकीन है कि प्रबंधित भाषाएँ C ++ संकलक के साथ तुलनात्मक रूप से प्रदर्शन करने के लिए बनाई जा सकती हैं।
कुल मिलाकर, मेरे अनुभव में, वैसे भी, खेल डेवलपर्स स्मृति, सीपीयू समय और संसाधनों (जब वे कर सकते हैं जितना अधिक प्रदर्शन को निचोड़ने की बात आती है) को नियंत्रित करते हैं, यही वजह है कि C / C ++ मुख्य रूप से उपयोग की जाने वाली भाषाएं हैं।
AFAIK .NET GC अभी भी विश्व शैली एल्गोरिथ्म को रोकने से ग्रस्त है। हालांकि यह विभिन्न प्रकार के अनुप्रयोगों के लिए उपयुक्त हो सकता है - यह गेम जैसे रियल-टाइम ऐप्स के लिए अस्वीकार्य है।
वास्तव में, वास्तविक समय के कार्यक्रमों के लिए प्रभावी रूप से प्रबंधित भाषाओं का उपयोग करना बहुत मुश्किल है, जब तक कि हमारे पास जीसी में कुछ सफलताएं नहीं हैं।
.NET पर निर्भर करता है कि PS3 जैसे प्लेटफ़ॉर्म पर उपलब्ध फ्रेमवर्क के लिए बड़े पैमाने पर फिर से लिखा जाता है, और पीसी पर या लाइव आर्केड गेम्स के लिए प्रदर्शन के नुकसान पूरी तरह से स्वीकार्य हो सकते हैं, लेकिन बड़े गेम को हर स्क्रैप की आवश्यकता होती है उनके कंसोल से प्रदर्शन जल्दी से पर्याप्त चलाने के लिए। इससे भी बड़ी बात यह है कि C ++ में विशाल मौजूदा कोड-बेस हैं जिन्हें कोई भी अपग्रेड नहीं कर सकता है, भले ही वे करना चाहते हों। सी ++ खेल उद्योग में है और यह लंबे समय तक वहां रहने वाला है।
ऐसे समय में जहां कंप्यूटर की शक्ति कम हो जाती है, वहां सब कुछ C या C ++ में प्रोग्राम करने की आवश्यकता होती है, केवल इसलिए कि कचरा एकत्र करने वाली भाषाएं प्रोग्रामर से मेमोरी कंट्रोल लेती हैं, और इस प्रकार, प्रदर्शन ड्रॉप हो सकता है।
आजकल, कंप्यूटर तेज़ हैं, लेकिन जैसा कि नुथ कहते हैं और इसे छोटा करने के लिए, अनुकूलन बुराई हो सकता है:
यह स्पष्ट है कि 3 डी ज्यामिति, भौतिकी, टकराव, प्रकाश व्यवस्था की गणना करने के लिए निम्न स्तर की कोर कार्यात्मकताओं को अनुकूलित करने की आवश्यकता होती है, जो उपलब्ध सबसे अच्छे प्रोसेसर को जल्दी से फूला देती है। आप आसानी से बता सकते हैं कि एक मशीन पर बढ़ती दृश्य गुणवत्ता लगभग हमेशा काफी प्रदर्शन को मार देती है।
अब, अन्य कार्यात्मकताएं हैं, जैसे कि गेम स्टेट्स, एआई, ध्वनि, इनपुट, नेटवर्क, जो अभी भी एक गेम में महत्वपूर्ण हैं, लेकिन जो शायद ही कभी कंप्यूटर संसाधन के रूप में नहीं लेगा। अधिकांश समय, उन कार्यों को अनुकूलित नहीं किया जाना चाहिए। यही भाषा और कचरा एकत्र करने वाली भाषाओं को लिपिबद्ध करने का लक्ष्य है: आपको अपनी स्मृति सुसंगतता और आपके एप्लिकेशन संगठन के बारे में सोचने की ज़रूरत नहीं है, क्योंकि आप इन भाषाओं के साथ जो कोड लिखेंगे, यदि आप निम्न स्तर के सामान को कोडित नहीं कर रहे हैं, तो कभी नहीं होगा टोंटी।
2 मामलों के साथ उदाहरण
दोनों 500 किलोमीटर की दूरी पर हैं।
पूरे परिवहन समय को छोटा बनाने के लिए लोडिंग / अनलोडिंग प्रक्रिया को तेज करने के लिए दोनों ही मामलों में, यह जानते हुए कि आप न तो नाव बनाते हैं और न ही ट्रक तेजी से चलते हैं?
उत्तर है: यह ट्रक के साथ मायने रखता है, लेकिन अब नाव के साथ नहीं, क्योंकि आपने पहले ही नाव के साथ स्टॉक को स्थानांतरित करके बहुत कुछ किया है।
मुझे नहीं पता कि आप इस रूपक को समझते हैं, लेकिन एक तरह से, यह आपको गणितीय समस्या की कल्पना कर सकता है, जो उत्तर को समझने से ज्यादा महत्वपूर्ण है।
यदि आप पहले से ही C / C ++ में प्रोग्राम किया हुआ इंजन लगाते हैं, तो स्क्रिप्टिंग लैंग्वेज तेजी से गेम बनाने की अनुमति देती है: 3D इंजन निम्न-स्तरीय समस्याओं को हल करता है, अब आपको अपनी स्क्रिप्ट्स के साथ गेम बनाना होगा।
लेकिन याद रखें: आप कभी भी निम्न स्तर की संकलित भाषा को बदलने में सक्षम नहीं होंगे। सांख्यिकीय रूप से टाइप की गई, संकलित भाषाएं प्रदर्शन का मूल हैं और आप उन्हें नियम नहीं देंगे, क्या यह एक कर्नेल, 3 डी इंजन या ग्राफिक कार्ड ड्राइवर होगा।
लेकिन निश्चित रूप से, यदि आपका गेम ग्राफिक रूप से सरल है और आपको बहुत अधिक सदिश संगणना की आवश्यकता नहीं है, तो आप गेमप्ले पर ध्यान केंद्रित कर सकते हैं और अनुकूलन के बारे में भूल सकते हैं, क्योंकि इस मामले में आपको कभी भी अनुकूलन से निपटना नहीं पड़ेगा क्योंकि आपकी मशीन वास्तव में तेज़ है। उसके लिए
सिवाय अगर आप डीएस पर इर पोर्ट करने की योजना बनाते हैं। लेकिन मैं वहीं रुक जाऊंगा।
देखिए, मुझे पता है कि यह एक शेख़ी है, लेकिन मैं सिर्फ बालों को नहीं तोड़ रहा हूं। मुझे लगता है कि अधिकांश प्रोग्रामर वास्तव में इसे एक साथ नहीं रखते हैं। एक भाषा का रन गति / प्रदर्शन से कोई संबंध नहीं है। यह संकलक / रूपरेखा है। आप cl (Microsoft कंपाइलर प्री 2010) या msbuild (2010 के लिए वर्तमान c ++ कंपाइलर) के खिलाफ बेहतर तरीके से बहस कर सकते हैं। हर रिलीज़ ये कंपाइलर बेहतर हो जाते हैं इसलिए आपको उनकी तुलना खुद के पिछले संस्करणों से भी करनी होगी। मैं .net से बहुत प्रभावित हूं और यह अच्छा प्रदर्शन करता है, लेकिन अगर यह थोड़ा बेहतर प्रदर्शन होता है तो मैं इसे नहीं लेता, एक कारण यह है कि पोर्टेबिलिटी।
एएए गेम्स विंडोज, लिनक्स, मैक, एक्सबॉक्स, पीएस 3, निंटेंडो आदि पर होना चाहते हैं।