गो में खेल का विकास? [बन्द है]


40

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

कुछ विचार:

  • Golang.org के अनुसार , गो प्रोग्राम "लगभग सी या सी ++ कोड के रूप में जल्दी से चलाएं" - बहुत जल्दी?
  • क्या गो का कचरा संग्रह खेलों के लिए अनुकूल है?
  • समवर्ती गोरआउट की भूमि में खेल बनाने के लिए कितना मानसिक पुन: टूलींग आवश्यक है?
  • गो को अक्सर एक "सिस्टम" -वेल भाषा कहा जाता है, जिसमें सर्वर सॉफ़्टवेयर उदाहरण के रूप में दिया जाता है। यह सुनकर मल्टीप्लेयर गेम सर्वरों के बारे में सोचना मुश्किल नहीं है।

तुम्हारे विचार?


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

1
मुझे आश्चर्य है कि अगर आप गेम को गेम में बना सकते हैं: P
RCIX

4
यकीन नहीं होता कि अगर ' गो ' को पूर्ण माना जाता है (तो फिर से यह मानव संचालित है)। लेकिन भंडारण स्थान बहुत सीमित है (कम से कम यदि एक विनियमन बोर्ड का उपयोग कर रहा है)।
डेविड सी। बिशप

@ DavidC.Bishop Funny ...
ब्रायन ओर्टिज़

1
यदि आप एक गो गेम इंजन बनाते हैं, तो आपको यह सुनिश्चित करना चाहिए कि आप भाषा का क्या लाभ उठा सकते हैं, इसके बजाय इसे उसी तरह से उपयोग करने की कोशिश करें जैसे आप अधिक "पारंपरिक" भाषा के साथ करेंगे और जो पहले से मौजूद है, उसकी नकल करेंगे।

जवाबों:


34

मेरे अपने सवालों पर ले:

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

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


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

1
वर्तमान गो जीसी प्रणाली एक प्लेसहोल्डर के कुछ प्रतीत होती है: "वर्तमान कार्यान्वयन एक सादे चिह्न और झाडू कलेक्टर है, लेकिन एक प्रतिस्थापन काम करता है" ( golang.org/doc/go_lang_faq.html#garbage-collection )। प्रतिस्थापन विकल्पों पर चर्चा की गई है; मुझे इस मामले में किसी भी ठोस फैसले की जानकारी नहीं है।
TSomKes

1
जो, स्पष्ट करने के लिए धन्यवाद! मुझे इसकी जानकारी नहीं थी। और हाँ TSomKes, मैंने वह देखा, इसलिए हम अपनी उम्मीदों को बनाए रख सकते हैं कि गो किसी बिंदु पर एक बेहतर कचरा संग्रहकर्ता को लागू करेगा।
Ricket

4
ध्यान दें कि उपरोक्त उत्तर तारीख से बाहर है जब यह वर्तमान गो कचरा कलेक्टर के पास आता है। यह गो 1.5 के साथ एक पूरी तरह से अलग गेम है। मुझे आश्चर्य है कि यह अभी भी कितनी चिंता का विषय है।
जोनास

3
और यह 1.8 के साथ लगता है, जीसी समवर्ती स्टॉप-द-वर्ल्ड में 100μs तक कम हो जाएगा। groups.google.com/forum/#!topic/golang-dev/Ab1sFeoZg_8
Dolanor

17

मैंने Go for OSX (ग्राफिक्स विंडो के लिए OpenGl का उपयोग करके) में एक छोटा इंजन लिखा है। मुझे C ++ गेम इंजन ( http://morganjeff.weebly.com/ ) के साथ कुछ अनुभव है और कुछ सुविधाओं के बारे में पढ़ने के बाद गो को आज़माने का फैसला किया।

गो 1.1 रिलीज के रूप में मुझे एक गेम इंजन लिखने के लिए आवश्यक अधिकांश विशेषताओं का समर्थन मिला है (वास्तव में एक गेम कोर के रूप में एक इंजन संपादकों को सुझाव देता है और क्या नहीं) सहित:

  • सदस्य फ़ंक्शन बाइंडिंग (संदेश प्रणाली के लिए)
  • परावर्तन अंतर्निहित है (क्रमांकन के लिए उपयोगी, बाहरी उपकरण समर्थन, आदि)
  • इंटरफेस (सिस्टम, घटकों, आदि के लिए बहुरूपी व्यवहार को लागू करने के लिए)

गो (एक बड़ी परियोजना के लिए) का उपयोग करने के कुछ लाभ:

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

सामान्य रूप से गो का उपयोग करने के कुछ लाभ:

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

गो का उपयोग करने के कुछ डाउनसाइड:

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

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

यहाँ लेख मैंने वादा किया है: http://blog.golang.org/2011/06/profiling-go-programs.html

जेफ


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

1
क्या आप निर्दिष्ट कर सकते हैं कि "आयात के संस्करण में निर्मित" से आपका क्या मतलब है, मैं केवल गो भाषा के संस्करण टैग से ही अवगत हूं।
Arne

@ Jj 1.2 के बाद से कोई भी परिप्रेक्ष्य बदलता है और Go 1.3 के आगामी परिवर्तनों को देखते हुए?
येलुमिनेट २५'१४

@Ane: अच्छा कॉल! मैं वास्तव में GoSublime, बहुत कुछ पसंद करता हूं। बिना आईडीई के मेरा मतलब यह है कि एक दृश्य डिबगर प्राप्त करने के लिए आपको गॉग्डब (जो एक महान उपकरण है) का उपयोग करना होगा, लेकिन यह दृश्य स्टूडियो जितना अच्छा नहीं है। यहाँ मैं पैकेज निर्भरता के बारे में क्या मतलब है और वर्ज़निंग: golang.org/cmd/go/... golang.org/cmd/go/#hdr-Import_path_syntax
jmorgan

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

4

कुछ और सोचने वाली बात यह है कि चूंकि गो अब भी अपेक्षाकृत नया है, इसलिए खेल के विकास में इस्तेमाल होने वाले बहुत से सामान्य पुस्तकालयों के लिए अभी तक बाइंडिंग नहीं हो सकती है।


निश्चित रूप से मामला। उदाहरण के लिए, मैं दो गो / एसडीएल परियोजनाओं में आया हूं, जिनमें से एक को छोड़ दिया गया लगता है। मैं उनमें से किसी एक का उपयोग करने के लिए (अपेक्षाकृत छोटे) खेल का एक मुट्ठी भर पाया है।
TSomKes

1
यदि आप OpenGl का उपयोग करते हैं तो आपको निश्चित रूप से github.com/go-gl की जांच करनी चाहिए, लेकिन यह SDL नहीं है, बल्कि एक अच्छा विकल्प है। वैक्टर के लिए github.com/Jragonmiris/mathgl है , लेकिन मुझे वहां कीड़े मिले। गो लाइक्स सी लाइब्रेरीज़ को लपेटना सुपर आसान है, इसके लिए मेकफाइल्स की कोई आवश्यकता नहीं है। आप सी हेडर फ़ाइलों को आयात भी कर सकते हैं और सीधे उनके कार्यों का उपयोग कर सकते हैं।
Arne

0

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

मुझे गलत मत समझिए, मुझे नई भाषाओं के साथ खेलना बहुत पसंद है, लेकिन अगर आप खेल को एक ऐसी भाषा चुनने की कोशिश कर रहे हैं जिसमें एक समुदाय और समर्थन है और आप बहुत बेहतर होंगे।


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

2
मुझे यहां असहमत होना है। खेल विकास से जुड़े अधिकांश सामान का भाषा से कोई लेना-देना नहीं है। OpenGL के बारे में सवाल पूछने से C C ++ गो या यहां तक ​​कि जावा में आपके द्वारा मौसम का कार्यक्रम करने के लिए कुछ भी नहीं है। और जिस तरह से आप टूलकिन के बारे में बात कर रहे हैं? और जाने के लिए असंगत क्यों होना चाहिए?
Arne
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.