आप स्क्रिप्टिंग भाषा में क्या देखते हैं? [बन्द है]


10

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

बिना किसी विवरण के (पूर्वाग्रह से बचने के लिए), मैं यह जानने के लिए उत्सुक हूं:

खेल के विकास के लिए स्क्रिप्टिंग भाषा में आपको क्या विशेषताएं पसंद हैं?

यदि आपने Lua, Python, या किसी अन्य एम्बेडेड भाषा जैसे Tcl या Guile का उपयोग किसी गेम प्रोजेक्ट में अपनी प्राथमिक स्क्रिप्टिंग भाषा के रूप में किया है, तो आपको कौन से पहलू सबसे अधिक उपयोगी लगे?

  • भाषा सुविधाएँ (लंबोदर, वर्ग, समानता)

  • कार्यान्वयन सुविधाएँ (प्रदर्शन अनुकूलन, JIT, हार्डवेयर त्वरण)

  • एकीकरण सुविधाएँ (C, C ++, या .NET बाइंडिंग)

  • या कुछ पूरी तरह से अलग?


2
Obfuscation: क्योंकि अगर इसे obfuscated किया जा सकता है तो यह संभवतः काफी लचीला भी है। पर्ल लो, उदाहरण के लिए, जो इस हद तक कि यह की वजह से उत्पादन की तरह लग रहा करने के लिए समझ से परे जा सकती लाइन शोर एक 300bps मॉडेम (जब किसी और घर के दूसरे छोर पर एक टेलीफोन उठाया) से दिन गए जब इन थे में वापस तेज। ; -पी
रिचर्डसन

1
@ रैंडोल्फ: अच्छी बात है। आपत्ति के साथ एकमात्र समस्या यह है कि यह एक स्थिर भाषा पर निर्भर करता है, जो युवा भाषाएं नहीं हैं। एक पर्यवेक्षक जो 0.10 के साथ काम करता है, वह 0.11 के साथ काम नहीं कर सकता है।
जॉन पूर्डी

@Jon Purdy: यह सही है (आपके लिए +1)। वहाँ भी obfuscated कोड को बनाए रखने के लिए और अधिक कठिन होने का पहलू है। टिप्पणी करने के लिए महत्वपूर्ण बात यह है, हालांकि, कि कहानियो को प्रदान कर सकते हैं एक कैसे लचीला एक भाषा है की दिलचस्प उपाय।
रैंडोल्फ रिचर्डसन

5
@ रैन्डोल्फ: जब पर्ल ऐसा नहीं दिखता है?
केन

1
@ जोए रेसेनिग यह कह रहा है कि 'मुझे कौन सा चुनना चाहिए', यह अधिक है 'पटकथा भाषा में क्या विशेषताएं अच्छी हैं'।
कम्युनिस्ट डक

जवाबों:


4

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

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

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

मुझे जो परेशानी हुई, वह यह थी कि मूल रूप से सभी मौजूदा स्क्रिप्टिंग भाषाओं को C का विस्तार करने के लिए डिज़ाइन किया गया था, C ++ नहीं, और C ++ मॉडल का कई तरह से ठीक से समर्थन नहीं करते हैं, और इसके अलावा, उनके पास पूरी तरह से अलग शब्दार्थ है। पृथ्वी पर मैं कैसे अनुवाद करने जा रहा हूं shared_ptr, जो स्वचालित नियतात्मक विनाश है, कचरा एकत्र पर्यावरण में? आप जो भी रैपिंग लाइब्रेरी चाहते हैं, आप लिख सकते हैं, आप अंतर्निहित भाषा शब्दार्थ को उस भाषा के साथ असंगत नहीं बदलेंगे, जिस भाषा के साथ आप इसे बढ़ाने की कोशिश कर रहे हैं। मैं यह कैसे सुनिश्चित कर सकता हूं कि यह void*सही प्रकार है? मैं विरासत से कैसे निपट सकता हूं? मैं अपवादों को कैसे फेंकूं और पकड़ूं? यह सिर्फ काम नहीं करता है।

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


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

2

वेब-आधारित गेमिंग के लिए, मेरे लिए तीन महत्वपूर्ण कारक हैं:

  • सुपरिचय
  • गति
  • एकीकरण

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

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


2

(घटते) महत्व के क्रम में व्यवस्थित:

  • एक नज़र में पढ़ने योग्य। वास्तव में, यह किसी भी भाषा के लिए एक आवश्यकता है जिसका मैं उपयोग करना चाहता हूं, लेकिन स्क्रिप्टिंग के लिए यह यकीनन अधिक महत्वपूर्ण है: स्क्रिप्ट, परिभाषा के अनुसार, "कोर" कोड की तुलना में अधिक बार बदलते हैं। तो, कोई LISP या PERL नहीं।
  • Terseness। लिपियों को लगातार लिखा और फिर से लिखा जाता है, और बहुत सारे और बहुत सारे "बॉयलरप्लेट" कोड टाइप करना अक्षम है।
  • आसान डिबगिंग। अधिमानतः ब्रेकपॉइंट्स, स्टेप-थ्रू आदि।
  • मेरी चुनी हुई "कोर" तकनीक के साथ आसान एकीकरण। अगर मैं अपने खेल के लिए C ++ का उपयोग कर रहा हूं, तो मुझे LUA की तरह अच्छे C ++ बाइंडिंग की आवश्यकता होगी। यदि खेल C # में है, तो मैं एक CLI- आधारित भाषा चुनूंगा: C #, IronPython, Boo।
  • भाषा की विशेषताएं: आसान साहचर्य सरणियां, कोरटाइन, शायद लैम्ब्डा। दरअसल, यह ज्यादातर इस बात पर निर्भर करता है कि मैं किस स्क्रिप्ट का उपयोग करने जा रहा हूं। AI स्क्रिप्ट, अलंकरण स्क्रिप्ट से अलग हैं।
  • अच्छा प्रलेखन। C # के पास एक संपूर्ण MSDN है जो इसे समर्पित है, और Boo के पास केवल स्रोत हैं। इसीलिए C # बेहतर है।
  • विकास का अच्छा वातावरण। वीएस या एक्लिप्स हर बार नोटपैड को हरा देता है।

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