हम विकास में लिपियों का उपयोग क्यों करते हैं?


67

मेरी वर्तमान परियोजना में, सर्वर की तरफ C ++ फ़ंक्शन द्वारा Lua स्क्रिप्ट्स को कॉल किया जाता है। उसके बाद, स्क्रिप्ट फिर से उस समाधान में अभी भी C ++ फ़ंक्शन को कॉल करते हैं। हमें ऐसी चीज़ें क्यों करनी चाहिए और C ++ फ़ंक्शन को सीधे कॉल नहीं करना चाहिए? ऐसी कौन सी परिस्थितियां हैं जिनमें स्क्रिप्ट की जरूरत होती है?

जवाबों:


73

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

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

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

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

तो नीचे की रेखा डिकूपिंग है। ऊपर सूचीबद्ध लाभ अक्सर एक स्क्रिप्टिंग भाषा बनाने या एकीकृत करने के लिए अतिरिक्त कार्य को कम करते हैं।


7
+1 यह कहने के लिए कि स्क्रिप्ट आमतौर पर गैर-प्रोग्रामर द्वारा अपडेट करना आसान है। डिजाइनर हमेशा प्रोग्रामर नहीं होते हैं, और उन्हें होना नहीं है।
ओक

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

5
जो - जो तर्क को अमान्य नहीं करता है, इसका मतलब है कि आपको यह तय करना होगा कि "प्रोग्रामिंग सामान" को "डिज़ाइन सामान" से अलग करना कहां है और आपके डिजाइनरों की तकनीकी विशेषज्ञता (या कमी) के आधार पर विभाजन रेखा अलग होगी। क्या है)।
इयान श्राइबेर

3
मुझे पूरा यकीन है कि किसी भी स्वाभिमानी डिजाइनर को कम से कम एक भाषा में पढ़ाया जाता है। चीजों को थोड़ा स्पष्ट करने के लिए, मैं "गैर-प्रोग्रामर" शब्द की बारीकियां करना चाहूंगा क्योंकि किसी का पेशा सॉफ्टवेयर इंजीनियर का नहीं है। मुझे इस शब्द का उपयोग करने का पछतावा है, जो के लिए धन्यवाद मुझे लगता है कि यह अस्पष्ट है। मेरा मानना ​​है कि प्रोग्रामर की एक विस्तृत श्रृंखला है, जो सरल एक्सएमएल से हार्डकोर असेंबली को गणित में भारी सिग्नल प्रोसेसिंग के लिए लिखते हैं। मुझे उम्मीद है कि यह "गैर-प्रोग्रामर" द्वंद्व मुद्दे को हल करता है।
नेफ

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

38

आपने गलत सवाल पूछा। मुझे लगता है कि असली सवाल यह है कि हम सी, सी ++, जावा जैसी "गैर-स्क्रिप्टिंग" भाषाओं के साथ क्यों डालते हैं? और जवाब एक कारण है: प्रदर्शन। (और शायद जड़ता, लेकिन प्रदर्शन के कारण वह जड़ता है, और जो कोई भी अच्छा C / C ++ / Java लिख सकता है, वह कम से कम पास करने योग्य रूबी / पायथन / Lua / जावास्क्रिप्ट लिख सकता है।)

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


4
मुझे यह तर्क बहुत पसंद है "डिजाइनरों को प्रोग्राम कर सकते हैं।" तेजी से विकास के मूल्य को खारिज करना और हर चीज को फिर से देखे बिना परिवर्तनों के साथ प्रयोग करने में सक्षम होना बहुत बुरा विचार है।
ओजक्र

10

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


8
  1. प्रत्येक नया लुआ वर्ग दो लाइनें है। प्रत्येक नया सी ++ वर्ग दर्द है।
  2. जब आप चाहते हैं कि सभी प्रकार के बारे में कोई फेरबदल नहीं है।
  3. कचरा इकठा करना।
  4. स्क्रिप्ट कोड अच्छी तरह से आभासी मशीनों में अलग-थलग है, उन सभी गंदा से दूर segfaults और सरणी overflows भटक।

5

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

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


4

एक परिदृश्य जहां स्क्रैप उपयोगी होते हैं, जब हम चाहते हैं कि हमारा इंजन प्लगइन्स / एडोनों द्वारा एक्स्टेंसिबल हो। ये एक्सटेंशन कई मामलों में गैर-पेशेवर लोगों (जैसे उन्नत गेमर्स और उत्साही) द्वारा बनाए जाते हैं। इस उद्देश्य के लिए लिपियां सुरक्षित और आसान हैं। स्क्रिप्ट का उपयोग करके, उन्हें संकलक का उपयोग करने की आवश्यकता नहीं है, और संकेत के बारे में पता करने की आवश्यकता नहीं है ...

इसका एक बड़ा उदाहरण गेम ऑफ वारक्राफ्ट है। इसमें समुदाय द्वारा बनाए गए हजारों जोड़ हैं। ये ऐडऑन्स LUA + XML के इस्तेमाल से लिखे गए हैं।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.