खेल में लुआ एक पटकथा भाषा के रूप में कैसे काम करता है?


67

मैं इस बात पर थोड़ा हाज़िर हूँ कि लुआ क्या है और C ++ में प्रोग्राम किया जाने वाला गेम इसका उपयोग कैसे करेगा। मैं मुख्य रूप से इसके संकलन और चलाने के तरीके के बारे में पूछ रहा हूं।

उदाहरण के लिए, जब आप C ++ में लिखे गए प्रोग्राम का उपयोग करते हैं, जो Lua लिपियों का उपयोग करता है: Lua में कोड C ++ में लिखे गए मुख्य प्रोग्राम में केवल फ़ंक्शन पर कॉल करता है और एक संकलित वर्ग के रूप में कार्य करता है जो संकलित होने और C ++ की मेमोरी हीप में जोड़ा जाता है। कार्यक्रम?

या क्या यह लिनक्स में बैश स्क्रिप्ट की तरह काम करता है जहां यह सिर्फ मुख्य कार्यक्रम से पूरी तरह से अलग कार्यक्रमों को निष्पादित करता है?

जवाबों:


89

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

वैचारिक रूप से, स्क्रिप्टिंग को सक्षम करने के लिए सामान्य चरण निम्नलिखित हैं (मैं स्क्रिप्ट के लिए होस्ट और छद्म-लू के लिए छद्म-सी का उपयोग करूंगा। ये सटीक चरण नहीं हैं, लेकिन सामान्य प्रवाह की तरह अधिक हैं जिसमें आप स्क्रिप्टिंग को सक्षम करते हैं।

  1. होस्ट प्रोग्राम में वर्चुअल मशीन बनाएँ:

    VM m_vm = createVM();
  2. एक समारोह बनाएँ और इसे वीएम को उजागर करें:

    void scriptPrintMessage(VM vm)
    {
        const char* message = getParameter(vm, 0); // first parameter
        printf(message);
    }
    
    //...
    
    createSymbol(m_vm, "print", scriptPrintMessage);

    ध्यान दें कि जिस नाम से हमने फ़ंक्शन को उजागर किया है ( print) फ़ंक्शन के आंतरिक नाम से मेल नहीं खाता है ( scriptPrintMessage)

  3. फ़ंक्शन का उपयोग करने वाले कुछ स्क्रिप्ट कोड चलाएँ:

    const char* scriptCode = "print(\"Hello world!\")"; // Could also be loaded from a file though
    doText(m_vm, scriptCode);

यही सब है इसके लिए। कार्यक्रम फिर निम्न तरीके से बहता है:

  1. तुम बुलाओ doText()। नियंत्रण को फिर आभासी मशीन में स्थानांतरित किया जाता है, जो पाठ को अंदर निष्पादित करेगा scriptCode

  2. स्क्रिप्ट कोड पहले से निर्यात किया गया प्रतीक पाता है print। यह तब फ़ंक्शन पर नियंत्रण स्थानांतरित करेगा scriptPrintMessage()

  3. जब scriptPrintMessage()खत्म हो जाता है, तो नियंत्रण वर्चुअल मशीन पर वापस स्थानांतरित हो जाएगा।

  4. जब पाठ के सभी scriptCodeको निष्पादित कर दिया गया है, doText()समाप्त हो जाएगा, और नियंत्रण रेखा के बाद आपके प्रोग्राम में वापस स्थानांतरित कर दिया जाएगा doText()

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

  • चिंताओं का पृथक्करण: C / C ++ में गेम इंजन लिखना और फिर लुआ जैसी स्क्रिप्ट भाषा में वास्तविक गेम लिखना एक सामान्य पैटर्न है। सही किया, खेल कोड इंजन से ही स्वतंत्र रूप से पूरी तरह से विकसित किया जा सकता है।

  • लचीलापन: स्क्रिप्टिंग भाषाओं की आमतौर पर व्याख्या की जाती है, और जैसे, एक स्क्रिप्ट में बदलाव के लिए पूरे प्रोजेक्ट के पुनर्निर्माण की आवश्यकता नहीं होगी। सही किया, आप एक स्क्रिप्ट को भी बदल सकते हैं और एक कार्यक्रम को पुनरारंभ किए बिना भी परिणाम देख सकते हैं!

  • स्थिरता और सुरक्षा: चूंकि स्क्रिप्ट एक वर्चुअल मशीन के अंदर चल रही है, अगर सही किया जाता है, तो छोटी गाड़ी स्क्रिप्ट होस्ट प्रोग्राम को क्रैश नहीं करेगी। यह विशेष रूप से महत्वपूर्ण है जब आप अपने उपयोगकर्ताओं को अपने खेल के लिए अपनी स्क्रिप्ट लिखने की अनुमति देते हैं। याद रखें कि आप जितनी चाहें उतनी स्वतंत्र वर्चुअल मशीनें बना सकते हैं! (मैंने एक बार एक MMO सर्वर बनाया था जिसमें प्रत्येक मैच एक अलग लुआ वर्चुअल मशीन पर चलता था)

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

हालांकि स्क्रिप्ट सही नहीं हैं। स्क्रिप्टिंग का उपयोग करने के कुछ सामान्य नुकसान हैं:

  • डिबगिंग बहुत मुश्किल हो जाता है: आमतौर पर, सामान्य आईडीई में शामिल डिबगर्स को स्क्रिप्ट के अंदर कोड को डीबग करने के लिए डिज़ाइन नहीं किया जाता है। इस वजह से, कंसोल ट्रेस डिबगिंग मेरे द्वारा पसंद किए जाने की तुलना में बहुत अधिक सामान्य है।

    कुछ स्क्रिप्टिंग भाषाओं जैसे लुआ में डिबगिंग की सुविधा है जिसका लाभ कुछ आईडीई जैसे कि ग्रहण में लिया जा सकता है। ऐसा करना बहुत मुश्किल है, और मैंने ईमानदारी से स्क्रिप्ट डिबगिंग के साथ-साथ देशी डीबगिंग को भी कभी नहीं देखा है।

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

  • आईडीई एकीकरण: यह संभावना नहीं है कि आपके आईडीई को पता चल जाएगा कि आपके कार्यक्रम से कौन से कार्य निर्यात किए जा रहे हैं, और इस तरह, इंटेलीसिएनस जैसी सुविधाओं और आपकी स्क्रिप्ट के साथ काम करने की संभावना नहीं है।

  • प्रदर्शन: आमतौर पर व्याख्या किए गए कार्यक्रमों के लिए, और एक अमूर्त आभासी मशीन के लिए जिसका आर्किटेक्चर वास्तविक हार्डवेयर से भिन्न हो सकता है, स्क्रिप्ट आमतौर पर देशी कोड की तुलना में धीमी होती हैं। कुछ VMs जैसे कि luaJIT और V8 हालांकि बहुत अच्छा काम करते हैं। यदि आप स्क्रिप्ट के कुछ बहुत भारी उपयोग करते हैं तो यह ध्यान देने योग्य हो सकता है।

    आमतौर पर, संदर्भ परिवर्तन (होस्ट-टू-स्क्रिप्ट और स्क्रिप्ट-टू-होस्ट) बहुत महंगे हैं, इसलिए यदि आप प्रदर्शन की समस्याएं हैं, तो आप उन्हें कम से कम करना चाह सकते हैं।

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

स्क्रिप्टिंग सिर्फ एक उपकरण है। आप इसका उपयोग कैसे करते हैं भयानक गेम पूरी तरह से आपके ऊपर है।


मैं वास्तव में इसके लिए नया हूं, लेकिन मैं एकता का उपयोग करता हूं। आपने एकता के बारे में कुछ उल्लेख किया है, क्या आप उस पर विस्तार कर सकते हैं? क्या मुझे कुछ और उपयोग करना चाहिए?
टोकामोचा

1
मैं printfआपके उदाहरण (या कम से कम उपयोग printf("%s", message);) का उपयोग नहीं करूँगा
शाफ़्ट फ्रीक

1
@ratchetfreak: आपके संदेश के अंत में अर्धविराम, जिसके बाद कोष्ठक मुझ पर आघात कर रहा है ...
पांडा पायजामा

1
इस साइट पर मैंने लंबे समय में देखे गए सबसे अच्छे उत्तरों में से एक; यह हर उत्थान का हकदार है। बहुत अच्छी तरह से किया।
स्टीवन स्टैडनिक

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

7

आम तौर पर, आप लुआ को कुछ मूल कार्यों को बांधते हैं या उजागर करते हैं (अक्सर ऐसा करने के लिए एक उपयोगिता पुस्तकालय का उपयोग करते हैं, हालांकि आप इसे हाथ से कर सकते हैं)। जब Lua कोड आपके मूल C ++ कोड में कॉल करने की अनुमति देता है जब आपका गेम उस Lua कोड को निष्पादित करता है। इस अर्थ में, आपकी धारणा है कि Lua कोड केवल मूल कोड में कॉल सत्य है (हालांकि Lua की कार्यक्षमता का अपना मानक उपलब्ध है, आपको सब कुछ के लिए अपने मूल कोड में कॉल करने की आवश्यकता नहीं है)।

Lua कोड की व्याख्या Lua रनटाइम द्वारा की जाती है, जो C कोड है जिसे आप अपने खुद के प्रोग्राम में लाइब्रेरी (आमतौर पर) के रूप में लिंक करते हैं। आप Lua होमपेज पर Lua कैसे काम करते हैं, इसके बारे में अधिक पढ़ सकते हैं । विशेष रूप से, लुआ "एक असम्बद्ध वर्ग" नहीं है जैसा कि आप जानते हैं, खासकर यदि आप C ++ वर्ग के बारे में सोच रहे हैं, क्योंकि C ++ व्यवहार में लगभग कभी गतिशील रूप से संकलित नहीं है। हालाँकि, Lua रनटाइम और ऑब्जेक्ट्स Lua स्क्रिप्ट द्वारा बनाए गए हैं जो आपका गेम चलाता है आपके गेम के सिस्टम मेमोरी पूल में जगह की खपत करता है।


5

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

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

आम तौर पर आप उन चीज़ों के लिए स्क्रिप्टिंग भाषाओं का उपयोग करना चाहते हैं जिन्हें आप अपडेट करना चाहते हैं या लाइन के नीचे से पुनरावृति करना चाहते हैं। मैंने देखा है कि बहुत सी कंपनियाँ GUI के लिए इसका उपयोग करती हैं इसलिए यह इंटरफ़ेस को बहुत अधिक अनुकूलन प्रदान करती है। आपको यह जानकारी प्रदान करता है कि कैसे उन्होंने अपने Lua इंटरफ़ेस को बनाया है आप स्वयं GUI को भी संशोधित कर सकते हैं। लेकिन कई अन्य रास्ते हैं जो आप लू का उपयोग करने के लिए ले सकते हैं, जैसे कि एआई तर्क, हथियारों के बारे में जानकारी, पात्रों की बातचीत, आदि।


3

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

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

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

आशा है कि यह आपके कुछ सवालों को स्पष्ट करने में मदद करता है।


3

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

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

यदि आप कभी भी अपने आप को एक गेम इंजन लिखना चाहते हैं (या आप केवल एक रेंडर इंजन के साथ काम करते हैं), तो यह पाठ यह समझने के लिए अमूल्य है कि एक स्क्रिप्टिंग भाषा को आपके इंजन / गेम में कैसे शामिल किया जा सकता है।

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


2

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

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

अब, आप सोच रहे होंगे, "ठीक है, मुझे लगता है कि यह थोड़ा आसान है, लेकिन धरती पर कोई व्यक्ति उस सारे प्रदर्शन को उपयोग की थोड़ी अतिरिक्त आसानी के लिए क्यों छोड़ देगा?"

आप इस धारणा में अकेले नहीं होंगे, हालाँकि आप अपने साथ जो कर रहे हैं, उसके आधार पर स्क्रिप्टिंग भाषाओं के साथ सहजता का स्तर, प्रदर्शन में बलिदान के लायक हो सकता है।

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

संपादित करें: लुआ खेल विकास में अधिक लोकप्रिय है क्योंकि यह यकीनन सबसे तेज (यदि सबसे तेज नहीं है) सार्वजनिक रूप से उपलब्ध स्क्रिप्टिंग भाषाओं में से एक है। हालांकि, इस अतिरिक्त गति के साथ, इसने अपनी कुछ सुविधा का त्याग किया है। यह कहा जा रहा है, यह अभी भी सीधे सी या सी ++ के साथ काम करने की तुलना में अधिक सुविधाजनक है।

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

जबकि आमतौर पर "स्क्रिप्टिंग लैंग्वेज" मानी जाने वाली भाषाओं को आमतौर पर पारंपरिक रूप से व्याख्या की जाती है, संकलित करने के बजाय, "स्क्रिप्टिंग लैंग्वेज" के रूप में उनकी परिभाषा का लंबा और छोटा होना वास्तव में इस बात का मेल है कि लोग उन्हें कैसे देखते हैं, और उनके रचनाकारों ने उन्हें कैसे परिभाषित किया।

आम तौर पर, एक भाषा को आसानी से एक स्क्रिप्टिंग भाषा माना जा सकता है (यदि आप Ousterhout के द्विभाजन से सहमत हैं) यदि यह निम्नलिखित मानदंडों को पूरा करता है (लेख से जुड़े लेख के अनुसार, ऊपर):

  • वे गतिशील रूप से टाइप किए जाते हैं
  • उनके पास जटिल डेटा संरचनाओं के लिए बहुत कम या कोई प्रावधान नहीं है
  • उनमें (लिपियों) कार्यक्रमों की व्याख्या की जाती है

इसके अतिरिक्त, यह अक्सर स्वीकार किया जाता है कि एक भाषा एक स्क्रिप्टिंग भाषा है यदि इसे किसी अन्य प्रोग्रामिंग भाषा के साथ बातचीत करने और कार्य करने के लिए डिज़ाइन किया गया है (आमतौर पर एक जिसे स्क्रिप्टिंग भाषा नहीं माना जाता है)।


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

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

पर्याप्त रूप से, आपकी परिभाषा विकिपीडिया के साथ अधिक इनलाइन है: "एक स्क्रिप्टिंग भाषा या स्क्रिप्ट भाषा एक प्रोग्रामिंग भाषा है जो स्क्रिप्ट का समर्थन करती है, एक विशेष रन-टाइम वातावरण के लिए लिखे गए प्रोग्राम जो व्याख्या कर सकते हैं (संकलन के बजाय ...)," मेरी टिप्पणी तब
Glampert

1
यहां तक ​​कि नियमित रूप से लुआ पूरी तरह से बाइटकोड के लिए संकलित है, जेआईटी संकलक भी देशी बाइनरी का उत्पादन कर सकता है। तो नहीं, लुआ की व्याख्या नहीं की गई है।
ओलेग वी। वोल्कोव

पहला भाग iffy है, मैं नीचे की ओर परीक्षा कर रहा हूँ। वह इस तरह से सही है कि अंततः इसकी व्याख्या की जाती है और @ ओलेगवी.वोलोव जेआईटी संकलन कुछ संकलित नहीं करता है। संकलन को संकलित समय द्वारा परिभाषित किया गया है, जिसमें Lua है, Lua बाइट-कोड नहीं (JIT या कोई JIT)। आओ हमारे पद को नहीं मिलाया।
एलेक टील
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.