क्रॉस-प्लेटफॉर्म गेम इंजन डेवलपमेंट के लिए C ++ 11 का उपयोग करना


18

नोट: यह C ++ 03 और C ++ 11 के बारे में 'आपकी राय देने वाला' प्रश्न नहीं है।

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

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

इसलिए, गेम डेवलपर्स जिनके पास कई प्लेटफार्मों और कंसोलों का अनुभव है, क्या आपको लगता है कि हमें C ++ 03 तक रहना चाहिए जब तक कि नई पीढ़ी के कंसोल नहीं आते हैं और अधिकांश लोग C ++ 11 मानक पर स्विच कर चुके हैं (क्या वे पहले से ही हैं?)। या अधिकांश कंसोल का उपयोग / समर्थन संकलक (वीसी ++, जीसीसी या वेरिएंट?) कर रहे हैं जो पहले से ही सी ++ 11 सुविधाओं का समर्थन कर रहे हैं?


1
मेरा ज्ञान कुछ हद तक पुराना है, इसलिए मैं इसे उत्तर के रूप में पोस्ट नहीं करूंगा, लेकिन कंसोल कंपाइलरों का मेरा पिछला अनुभव यह है कि आप भाग्यशाली हैं यदि वे पुराने मानक से मेल खाते हैं, तो कभी भी नया अनुभव न करें।
21

1
कौन सी सुविधाएँ और क्यों वे इतने महत्वपूर्ण हैं कि आप एक मानक का उपयोग करने पर विचार करते हैं जो कि सबसे लोकप्रिय विकास प्लेटफार्मों पर भी पूरी तरह से लागू नहीं होता है?
सांप 5

4
@ स्नेक 5: ऑटो, लैम्ब्डा, टेम्पलेट एलियास, सी-टॉर डेलिगेशन। ये सुविधाएँ न केवल हमारे कोड को अधिक पठनीय / मेनटेबल बनाएंगी बल्कि उत्पादकता को बढ़ाएंगी। जब मैं C ++ 11 से C ++ 03 पर स्विच करता हूं तो बस ऑटो कीवर्ड एक ऐसी चीज है जो मुझे बहुत याद आती है। अन्य विशेषताएं जैसे कि वैरेडिक टेम्प्लेट, हालांकि बहुत शक्तिशाली हैं और निश्चित रूप से कोड में सुधार कर सकते हैं, हम बिना कर सकते हैं (और वीसी ++ कंपाइलर द्वारा अब तक लागू नहीं किए गए हैं)।
समरसा

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

1
@DevilWithin, मैं बिना किसी समस्या के Android NDK में काफी कुछ C ++ 11 सुविधाओं का उपयोग कर रहा हूं।
नॉटलेश

जवाबों:


19

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

यदि आप इस तरह के जोखिम को लेने के लिए तैयार हैं auto, तो हर तरह से इसके लिए जाएं। लेकिन मैं आपको इसे करने की सलाह देने वाला नहीं हूं।

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


4
इस के लिए +1 (और बाकी पोस्ट, लेकिन यह): "अनजान कंपाइलर लेखकों के झुंड पर [आईएनजी] भरोसा करें कि एज लैंग्वेज मानकों के रक्तस्राव का सही पालन खतरनाक है"। नवीनतम खिलौनों के साथ प्रयोग करना हमेशा मजेदार होता है, उन पर भरोसा करना इतना नहीं।
NoobsArePeople2

2
मैं हमेशा इन "सतर्क" जवाब देने के बारे में चिंतित हूं, खासकर जब वे स्पष्ट रूप से नहीं हैं जो मूल पोस्टर सुनना चाहते हैं। लेकिन मैंने अपने करियर में कई बार कॉन्सोल पर बड़े संकलक कीड़े देखे हैं, मेरे लिए एक क्रॉस-प्लेटफ़ॉर्म प्रोजेक्ट में नई भाषा मानकों पर आरामदायक कूद महसूस करने के लिए। एक संकलक में मुद्दों के आसपास पाने के लिए अपने कोड को फिर से लिखने की आवश्यकता कभी भी मज़ेदार नहीं होती है, खासकर जब आप एक समय सीमा के नीचे होते हैं।
ट्रेवर पॉवेल

मैं इसे कम नहीं करने जा रहा हूं, लेकिन नया सी ++ मानक ऑटोएक्टिव कीवर्ड की तुलना में बहुत अधिक है।
vdaras

1
@TrevorPowell, आपने कहा कि ऑटो कीवर्ड के लिए वह जो जोखिम उठाएगा, जब नए C ++ मानक में बहुत अधिक महत्वपूर्ण और मौलिक विशेषताएं हैं। जोखिम संदर्भों के बारे में विचार करते समय उनमें से कुछ, जैसे कि संदर्भ संदर्भों को महत्वपूर्ण रूप से ध्यान में रखा जाना चाहिए।
vdaras

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

6

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

लेकिन इसका मतलब है कि आपके खेल पर काम करने के लिए कम समय है।

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

http://cppnow.org/session/refactoring-c-with-clang/

http://www.youtube.com/watch?v=mVbDzTM21BQ

http://clang.llvm.org/docs/Tooling.html

http://clang.llvm.org/docs/RAVFrontendAction.html


अत्यधिक दिलचस्प; क्या आपने इसे (या इसी तरह) उद्देश्य के लिए खुद कोशिश की है?
जोनास बिस्ट्रॉम

अभी तक नहीं, तब तक इंतजार करने का फैसला किया जब तक कि यह थोड़ा बेहतर विकसित नहीं हो गया, लेकिन पिछली बार जब मैंने वास्तव में इसे देखा था, तो यह केवल svn में था।
डेविड सी। बिशप

बहुत दिलचस्प (+1)
समोरसा

यह मुझे अजगर की तरह कुछ याद दिलाता है, 2to3लेकिन इसके विपरीत और बहुत अधिक भयानक है, लेकिन शायद इसका उपयोग करना अधिक कठिन है। यार, कितना बेहतर autoमिल सकता है?
स्टीवन लू
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.