লুয়া গেমগুলিতে স্ক্রিপ্টিং ভাষা হিসাবে কীভাবে কাজ করে?


67

লুয়া হুবহু কী এবং আমি সি ++ তে প্রোগ্রাম হওয়া কোনও গেমটি কীভাবে এটি ব্যবহার করবে সে সম্পর্কে আমি কিছুটা আস্তে আস্তে আছি। আমি এটি প্রাথমিকভাবে জিজ্ঞাসা করছি যে এটি কীভাবে সংকলিত হয় এবং চালিত হয়।

উদাহরণস্বরূপ আপনি যখন সি ++ তে লিখিত একটি প্রোগ্রাম ব্যবহার করেন যা লুয়া স্ক্রিপ্টগুলি ব্যবহার করে: লুয়ার কোডটি কি সি ++ তে লিখিত মূল প্রোগ্রামটির ফাংশনগুলিতে কল করে এবং সি -++ এর মেমরি হিপটিতে সংকলিত হওয়ার অপেক্ষায় থাকা একটি নিরবচ্ছিন্ন শ্রেণীরূপে কাজ করে? কার্যক্রম?

অথবা এটি লিনাক্সে বাশ স্ক্রিপ্টের মতো কাজ করে যেখানে এটি মূল প্রোগ্রাম থেকে সম্পূর্ণ পৃথকভাবে প্রোগ্রাম চালায়?

উত্তর:


89

স্ক্রিপ্টিং এমন একটি প্রোগ্রামিং বিমূর্ততা যেখানে আপনি (ধারণাগতভাবে) একটি প্রোগ্রাম (স্ক্রিপ্ট) অন্য কোনও প্রোগ্রামের (হোস্ট) ভিতরে চলছে। বেশিরভাগ ক্ষেত্রে, আপনি যে ভাষায় স্ক্রিপ্টটি লেখেন সে ভাষা হোস্টটি যে ভাষাতে লেখা হয় তার চেয়ে আলাদা তবে কোনও প্রোগ্রামের অভ্যন্তরে কোনও প্রোগ্রামের বিমূর্ততা স্ক্রিপ্টিং হিসাবে বিবেচনা করা যেতে পারে।

ধারণাগতভাবে, স্ক্রিপ্টিং সক্ষম করার সাধারণ পদক্ষেপগুলি হ'ল (আমি হোস্টের জন্য সিউডো-সি এবং স্ক্রিপ্টের জন্য সিউডো-লুয়া ব্যবহার করব These এটি সঠিক পদক্ষেপ নয়, তবে সাধারণ প্রবাহের মতো যা আপনি স্ক্রিপ্টিং সক্ষম করেন)

  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()

সুতরাং সাধারণভাবে, আপনি যা করছেন তা অন্য প্রোগ্রামের ভিতরে একটি প্রোগ্রাম চালাচ্ছে। তাত্ত্বিকভাবে বলতে গেলে, স্ক্রিপ্টগুলি দিয়ে আপনি কিছুই করতে পারবেন না যা আপনি এগুলি ছাড়া করতে পারবেন না, তবে এই বিমূর্ততা আপনাকে কিছু আকর্ষণীয় জিনিস সত্যিই খুব সহজেই করতে দেয়। এর মধ্যে কয়েকটি হ'ল:

  • উদ্বেগের বিভাজন: সি / সি ++ তে গেম ইঞ্জিন এবং তারপরে লুয়ার মতো স্ক্রিপ্ট ভাষায় আসল খেলাটি লেখার একটি সাধারণ প্যাটার্ন। ঠিক হয়ে গেছে, গেম কোডটি ইঞ্জিন থেকে সম্পূর্ণ স্বাধীনভাবে বিকাশ করা যেতে পারে।

  • নমনীয়তা: স্ক্রিপ্টিং ভাষাগুলি সাধারণত ব্যাখ্যা করা হয় এবং এর মতো কোনও স্ক্রিপ্টে পরিবর্তনের জন্য পুরো প্রকল্পটির পুনর্নির্মাণের প্রয়োজন হয় না। ডান হয়ে গেছে, আপনি এমনকি কোনও স্ক্রিপ্ট পরিবর্তন করতে পারেন এবং কোনও প্রোগ্রাম পুনরায় চালু না করে ফলাফলগুলি দেখতে পারেন!

  • স্থায়িত্ব এবং সুরক্ষা: যেহেতু স্ক্রিপ্টটি ভার্চুয়াল মেশিনের অভ্যন্তরে চলছে, সঠিকভাবে করা গেলে, একটি বাগি স্ক্রিপ্ট হোস্ট প্রোগ্রামটি ক্রাশ করবে না। আপনি যখন আপনার ব্যবহারকারীদের নিজের গেমটিতে তাদের নিজস্ব স্ক্রিপ্টগুলি লেখার অনুমতি দিন তখন এটি বিশেষভাবে গুরুত্বপূর্ণ। মনে রাখবেন যে আপনি নিজের পছন্দমতো স্বাধীন ভার্চুয়াল মেশিন তৈরি করতে পারেন! (আমি একবার একটি এমএমও সার্ভার তৈরি করেছি যাতে প্রতিটি ম্যাচ পৃথক লুয়া ভার্চুয়াল মেশিনে চলে)

  • ভাষার বৈশিষ্ট্য: হোস্ট এবং স্ক্রিপ্ট ভাষার জন্য আপনার পছন্দের উপর ভিত্তি করে স্ক্রিপ্টিং ভাষাগুলি ব্যবহার করার সময়, আপনি প্রতিটি ভাষার যে অফার দেওয়া হয় তার সেরা বৈশিষ্ট্যগুলি ব্যবহার করতে পারেন। বিশেষত, লুয়ার কর্টাইনগুলি একটি আকর্ষণীয় বৈশিষ্ট্য যা সি বা সি ++ এ প্রয়োগ করা খুব কঠিন

স্ক্রিপ্টগুলি যদিও নিখুঁত নয়। স্ক্রিপ্টিং ব্যবহারের কিছু সাধারণ অসুবিধা রয়েছে:

  • ডিবাগিং খুব কঠিন হয়ে যায়: সাধারণত, সাধারণ আইডিইতে অন্তর্ভুক্ত ডিবাগারগুলি স্ক্রিপ্টগুলির মধ্যে কোডটি ডিবাগ করার জন্য ডিজাইন করা হয় না। এর কারণে, কনসোল ট্রেস ডিবাগিং আমি চাই তার চেয়ে অনেক বেশি সাধারণ।

    লুয়ার মতো কিছু স্ক্রিপ্টিং ভাষার ডিবাগিংয়ের সুবিধা রয়েছে যা কিছু আইডিই যেমন Eclipse এ গ্রহণ করা যায়। এটি করা খুব কঠিন এবং আমি সত্যই কখনও স্ক্রিপ্ট ডিবাগিংয়ের পাশাপাশি নেটিভ ডিবাগিংয়ের কাজ দেখিনি।

    যাইহোক, ityক্য বিকাশকারীদের এই বিষয়ে আগ্রহের চরম অভাব হ'ল তাদের গেম ইঞ্জিন সম্পর্কে আমার মূল সমালোচনা এবং আমি আর এটি ব্যবহার না করার মূল কারণ, তবে আমি ডিগ্রি করি।

  • আইডিই ইন্টিগ্রেশন: আপনার আইডিই আপনার প্রোগ্রাম থেকে কোন ফাংশনগুলি রফতানি হচ্ছে তা অসম্ভব এবং এর মতো, ইন্টেলিসেন্স এবং এর মতো বৈশিষ্ট্যগুলি আপনার স্ক্রিপ্টগুলির সাথে কাজ করার সম্ভাবনা কম।

  • পারফরম্যান্স: সাধারণভাবে ব্যাখ্যা করা প্রোগ্রাম হওয়া এবং এটি এমন একটি বিমূর্ত ভার্চুয়াল মেশিনের জন্য যার আর্কিটেকচারটি সত্যিকারের হার্ডওয়্যার থেকে আলাদা হতে পারে, স্ক্রিপ্টগুলি সাধারণত স্থানীয় কোডের চেয়ে কার্যকর করতে ধীর হয়। লুয়াজিআইটি এবং ভি 8 এর মতো কিছু ভিএম যদিও খুব ভাল কাজ করে। আপনি যদি স্ক্রিপ্টগুলির খুব ভারী ব্যবহার করেন তবে এটি লক্ষণীয় হতে পারে।

    সাধারণত, প্রসঙ্গে পরিবর্তনগুলি (হোস্ট-টু-স্ক্রিপ্ট এবং স্ক্রিপ্ট-থেকে-হোস্ট) খুব ব্যয়বহুল, তাই আপনি যদি পারফরম্যান্সের সমস্যা হয়ে থাকেন তবে আপনি সেগুলি হ্রাস করতে চাইতে পারেন।

আপনি কীভাবে আপনার স্ক্রিপ্টগুলি ব্যবহার করবেন তা নির্ভর করে। আমি লোডিং সেটিংসের মতো সহজ জিনিসের জন্য স্ক্রিপ্টগুলি ব্যবহার করেছি, খুব পাতলা গেম ইঞ্জিনের সাহায্যে স্ক্রিপ্টিং ভাষায় পুরো গেম তৈরি করার মতো জটিল। আমি একবার এমনকি একটি খুব বহিরাগত গেম ইঞ্জিন দেখেছি যা লুয়া এবং জাভাস্ক্রিপ্ট মিশ্রিত করেছে (ভি 8 এর মাধ্যমে) স্ক্রিপ্টিং।

স্ক্রিপ্টিং কেবল একটি সরঞ্জাম। আপনি কীভাবে দুর্দান্ত খেলা তৈরি করতে এটি ব্যবহার করেন তা সম্পূর্ণরূপে আপনার is


আমি এতে সত্যই নতুন, তবে আমি ityক্য ব্যবহার করি। আপনি ityক্য সম্পর্কে কিছু উল্লেখ করেছেন, আপনি কি সে সম্পর্কে বিস্তারিত বলতে পারবেন? আমার কি অন্য কিছু ব্যবহার করা উচিত?
টোকামোচা

1
আমি printfআপনার উদাহরণে (বা কমপক্ষে ব্যবহার printf("%s", message);) ব্যবহার করব না
রাচেট ফ্রিক

1
@ratchetfreak: আপনার বার্তার শেষে সেমিকোলনটি পরে প্রথম বন্ধনী আমার দিকে তাকাচ্ছে ...
পান্ডা পাজামা

1
একটি দীর্ঘ উত্তর আমি এই সাইটে দেখেছি দীর্ঘ সময়; এটি প্রাপ্ত প্রতিটি উর্ধ্বগতির প্রাপ্য। খুব সুন্দরভাবে সম্পন্ন হয়েছে।
স্টিভেন স্টাডনিকি

1
গেমসে লুয়ার পোস্টার চাইল্ড হ'ল ওয়ার্ল্ড অফ ওয়ারক্রাফ্ট, যেখানে ইউআইয়ের বেশিরভাগ অংশ লুয়ায় লেখা হয় এবং বেশিরভাগই প্লেয়ার দ্বারা প্রতিস্থাপন করা যেতে পারে। আমি অবাক হয়েছি আপনি এর উল্লেখ করেন নি।
মাইকেল হ্যাম্পটন

7

সাধারণত, আপনি লুয়ার সাথে কিছু নেটিভ ফাংশন বাঁধেন বা প্রকাশ করেন (প্রায়শই এটির জন্য কোনও ইউটিলিটি লাইব্রেরি ব্যবহার করে , যদিও আপনি এটি হাতে হাতে করতে পারেন)। যখন আপনার গেমটি লুয়া কোডটি কার্যকর করে তখন লুয়া কোডটিকে আপনার স্থানীয় সি ++ কোডে কল করার অনুমতি দেয়। এই অর্থে, আপনার ধারণাটি যে লুয়া কোডটি কেবলমাত্র স্থানীয় কোডে কল করে তা সত্য (যদিও লুয়ার নিজস্ব কার্যকারিতাটির নিজস্ব লাইব্রেরি রয়েছে; প্রতিটি কিছুর জন্য আপনার নিজের কোডে কল করার দরকার নেই )।

লুয়া কোডটি নিজেই লুয়া রানটাইম দ্বারা ব্যাখ্যা করা হয়, এটি সি কোড যা আপনি নিজের প্রোগ্রামে একটি লাইব্রেরি হিসাবে (সাধারণত) লিঙ্ক করেন। লুয়া লুয়া হোমপেজে কীভাবে কাজ করে সে সম্পর্কে আপনি আরও পড়তে পারেন । বিশেষত, আপনি যেমনটি লক্ষ্য করেন লুয়া হ'ল "একটি অসম্পূর্ণ শ্রেণি" নয়, বিশেষত যদি আপনি সি ++ ক্লাসের কথা ভাবেন, কারণ সি ++ প্রায়শই গতিশীলভাবে অনুশীলনে সংকলিত হয় না। তবে, লুয়া রানটাইম এবং লুয়া স্ক্রিপ্টগুলি তৈরি করেছে যেগুলি আপনার গেমটি চালায় সেগুলি আপনার গেমের সিস্টেম মেমরির পুলটিতে স্থান গ্রহণ করে।


5

লুয়ার মতো স্ক্রিপ্টিং ভাষা বিভিন্ন উপায়ে ব্যবহার করা যেতে পারে। যেমন আপনি বলেছিলেন যে আপনি মূল প্রোগ্রামটিতে ফাংশনগুলি কল করতে লুয়া ব্যবহার করতে পারেন তবে আপনি চাইলে কেবল ল + ফাংশনগুলিও সি ++ পাশ থেকে কল করতে পারেন। সাধারণত আপনি নিজের পছন্দের স্ক্রিপ্টিং ভাষার সাথে কিছুটা নমনীয়তা আনতে একটি ইন্টারফেস তৈরি করেন যাতে আপনি চিত্রের ধারাবাহিকতায় স্ক্রিপ্টিং ভাষাটি ব্যবহার করতে পারেন। লুয়ার মতো স্ক্রিপ্টিং ল্যাঙ্গুয়েজ সম্পর্কে দুর্দান্ত বিষয়টি হ'ল সংকলনের পরিবর্তে সেগুলি ব্যাখ্যা করা হয় যাতে আপনি ফ্লাইতে লুয়া স্ক্রিপ্টগুলি সংশোধন করতে পারেন যাতে আপনার গেমটি কেবল আপনাকে পুনরায় সংকলনের জন্য অপেক্ষা করতে হবে না যদি আপনি কী করেন 'সম্পন্ন আপনার পছন্দ অনুসারে হয় না।

লুয়া কমান্ড কেবল তখনই কল করা হয় যখন সি ++ প্রোগ্রাম তাদের সম্পাদন করতে চায়। যেমন, কোডটি যখন ডাকা হয় তখনই তা ব্যাখ্যা করা হবে। আমার ধারণা আপনি লুয়া কে একটি বাশ স্ক্রিপ্ট হিসাবে বিবেচনা করতে পারেন যা মূল প্রোগ্রাম থেকে পৃথকভাবে কার্যকর করে।

সাধারণত আপনি যে জিনিসগুলি আপডেট করতে বা লাইনটি আরও নিচে পুনরাবৃত্তি করতে চাইতে পারেন তার জন্য স্ক্রিপ্টিং ভাষা ব্যবহার করতে চান। আমি অনেক সংস্থাগুলি এটি GUI এর জন্য ব্যবহার করতে দেখেছি তাই এটি ইন্টারফেসে অনেকগুলি অনুকূলিতকরণ সরবরাহ করে ability আপনাকে কীভাবে তারা তাদের লুয়া ইন্টারফেস তৈরি করেছে তা জানাতে আপনি নিজেও জিইউআই সংশোধন করতে পারেন। তবে লুয়া ব্যবহারে আপনি নিতে পারেন এমন আরও অনেকগুলি পথ রয়েছে যেমন এআই যুক্তি, অস্ত্র সম্পর্কিত তথ্য, চরিত্রের কথোপকথন ইত্যাদি


3

লুয়া সহ বেশিরভাগ স্ক্রিপ্টিং ভাষাগুলি ভার্চুয়াল মেশিনে ( ভিএম ) কাজ করে যা মূলত একটি "আসল" সিপিইউ নির্দেশনা বা ফাংশন কলের স্ক্রিপ্ট নির্দেশকে মানচিত্র করার ব্যবস্থা map লুয়া ভিএম সাধারণত মূল প্রয়োগ হিসাবে একই প্রক্রিয়াতে চলে। এটি যে গেমগুলি এটি ব্যবহার করে তাদের জন্য এটি বিশেষভাবে সত্য। লুয়া এপিআই আপনাকে স্ক্রিপ্ট ফাইলগুলি লোড এবং সংকলনের জন্য স্থানীয় অ্যাপ্লিকেশনটিতে কল করে এমন কয়েকটি ফাংশন সরবরাহ করে। যেমন luaL_dofile()প্রদত্ত স্ক্রিপ্টটি লুয়া বাইটকোডে সংকলন করে এবং পরে এটি চালায়। এই বাইটকোডটি তখন ভিআইএম দ্বারা API এর অভ্যন্তরে দেশীয় মেশিনের নির্দেশাবলী এবং ফাংশন কলগুলিতে ম্যাপ করা হবে।

কোনও স্থানীয় ভাষা যেমন সি ++ এর সাথে স্ক্রিপ্টিং ভাষার সাথে সংযোগ স্থাপনের প্রক্রিয়াটিকে বাইন্ডিং বলে । লুয়া ক্ষেত্রে, এর এপিআই ফাংশন সরবরাহ করে যা আপনাকে স্ক্রিপ্ট কোডে দেশীয় ফাংশনগুলি প্রকাশ করতে সহায়তা করে। সুতরাং আপনি উদাহরণস্বরূপ একটি সি ++ ফাংশন সংজ্ঞায়িত করতে পারেন say_hello()এবং লুয়া স্ক্রিপ্ট থেকে এই ফাংশনটিকে কলযোগ্য করে তুলতে পারেন। লুয়া এপিআই সি ++ কোডের মাধ্যমে ভেরিয়েবল এবং সারণী তৈরির জন্যও পদ্ধতি সরবরাহ করে যা স্ক্রিপ্টগুলি চালিত হওয়ার পরে প্রদর্শিত হবে। এই বৈশিষ্ট্যগুলিকে একত্রিত করে আপনি লুয়ায় পুরো সি ++ ক্লাস প্রকাশ করতে পারেন। বিপরীতটিও সম্ভব, লুয়া এপিআই ব্যবহারকারীকে লুয়া ভেরিয়েবলগুলি সংশোধন করতে এবং দেশীয় সি ++ কোড থেকে লুয়া ফাংশনগুলি কল করার অনুমতি দেয়।

বেশিরভাগ ক্ষেত্রে যদি সমস্ত স্ক্রিপ্টিং ভাষা স্থানীয় কোডের সাথে স্ক্রিপ্ট কোডের বাঁধাইয়ের সুবিধার্থে এপিআই সরবরাহ করে না। বেশিরভাগগুলি বাইকোডেও সংকলিত হয় এবং একটি ভিএম-তে চালিত হয় তবে কিছুকে লাইন বাই লাইন ব্যাখ্যা করা যেতে পারে।

আশা করি এটি আপনার কয়েকটি প্রশ্ন পরিষ্কার করতে সহায়তা করবে।


3

যেহেতু কেউ এটি উল্লেখ করেনি, আমি আগ্রহীদের জন্য এটি এখানে যুক্ত করব। গেম স্ক্রিপ্টিং মাস্টারি নামে এই বিষয়ের উপর একটি পুরো বই রয়েছে । এটি একটি চমত্কার পাঠ যা বেশ কিছুক্ষণ আগে লেখা হয়েছিল তবে এটি আজ পুরোপুরি প্রাসঙ্গিক remains

এই বইটি আপনাকে কেবল স্ক্রিপ্টিং ভাষাগুলি কীভাবে স্থানীয় কোডের সাথে ফিট করে তা প্রদর্শন করবে না, এটি আপনাকে কীভাবে আপনার নিজস্ব স্ক্রিপ্টিং ভাষা বাস্তবায়িত করতে শেখায়। যদিও এটি 99% ব্যবহারকারীর জন্য অতিমাত্রার হবে, আসলে এটি বাস্তবায়নের চেয়ে আরও ভাল কিছু বোঝার আর কোনও উপায় নেই (এমনকি খুব প্রাথমিক আকারেও)।

আপনি যদি কোনও গেম ইঞ্জিন নিজেই লিখতে চান (বা আপনি কেবল রেন্ডার ইঞ্জিন দিয়ে কাজ করেন), এই লিখিতটি কীভাবে আপনার ইঞ্জিন / গেমের মধ্যে কোনও স্ক্রিপ্টিং ভাষা সর্বোত্তমভাবে অন্তর্ভুক্ত করা যায় তা বোঝার জন্য মূল্যবান।

এবং যদি আপনি কখনও নিজের স্ক্রিপ্টিং ভাষা তৈরি করতে চান তবে এটি শুরু করার জন্য সেরা জায়গাগুলির একটি (যতদূর আমি জানি)।


2

প্রথমত, স্ক্রিপ্টিং ভাষাগুলি সাধারণত সংকলিত হয় না । এটি সাধারণত স্ক্রিপ্টিং ভাষা হিসাবে তাদের সংজ্ঞায়িত করে তার একটি বৃহত অংশ। এগুলি প্রায়শই পরিবর্তে "ব্যাখ্যা করা হয়"। এর মূল অর্থটি হ'ল এখানে আরও একটি ভাষা রয়েছে (যা একটি সংকলিত হয়, প্রায়শই না হয়) যা পাঠ্যে পড়ছে, রিয়েল টাইমে এবং ক্রিয়াকলাপগুলি লাইন-লাইন।

এই এবং অন্যান্য ভাষার মধ্যে পার্থক্য হ'ল স্ক্রিপ্টিং ভাষাগুলি সহজতর হয় (সাধারণত "উচ্চতর স্তর" হিসাবে পরিচিত)। তবে এগুলি কিছুটা ধীরে ধীরেও থাকে, কারণ সংকলকগণ কোডিংয়ের "মানব উপাদান" নিয়ে আসে এমন অনেকগুলি বিষয়কে অনুকূল করে তোলে এবং ফলস্বরূপ বাইনারিটি মেশিনের জন্য ছোট এবং দ্রুত পড়তে ঝোঁক। অতিরিক্তভাবে, সংকলিত প্রোগ্রামগুলি সহ, চালিত কোডটি পড়ার জন্য অন্য প্রোগ্রাম থেকে কম ওভারহেড চালানো দরকার ।

এখন, আপনি হয়তো ভাবছেন, "আচ্ছা আমি বুঝতে পারি যে এটি কিছুটা সহজ, তবে কেন পৃথিবীতে কেউ সামান্য অতিরিক্ত ব্যবহারের সহজতার জন্য সমস্ত দক্ষতা ছেড়ে দেবে?"

আপনি এই অনুমানের মধ্যে একা থাকবেন না, তবে আপনি যে স্ক্রিপ্টিং ভাষার সাথে স্বাচ্ছন্দ্য বজায় রাখতে পারেন তা নির্ভর করে আপনি কী করছেন তার উপর নির্ভর করে আপনি পারফরম্যান্সে ত্যাগের পক্ষে উপযুক্ত হতে পারেন।

মূলত: উদাহরণস্বরূপ যেখানে প্রোগ্রামটি চালিত হচ্ছে তার গতির চেয়ে বিকাশের গতি আরও গুরুত্বপূর্ণ - একটি স্ক্রিপ্টিং ভাষা ব্যবহার করুন। গেম বিকাশে এই জাতীয় পরিস্থিতি রয়েছে। বিশেষত যখন উচ্চ-স্তরের ইভেন্ট হ্যান্ডলিংয়ের মতো তুচ্ছ জিনিসগুলি নিয়ে কাজ করা হয়।

সম্পাদনা: লুয়া গেমের বিকাশে বরং জনপ্রিয় হিসাবে পরিচিত হওয়ার কারণ হ'ল এটি পৃথিবীতে সর্বজনীনভাবে উপলব্ধ স্ক্রিপ্টিং ভাষাগুলির মধ্যে তাত্ক্ষণিকভাবে দ্রুততম (যদি দ্রুত নয়) of তবে এই অতিরিক্ত গতির সাথে এটি এর সুবিধার্থে কিছু ত্যাগ করেছে। বলা হচ্ছে, এটি সরাসরি সি বা সি ++ নিয়ে কাজ করার চেয়ে তর্কযোগ্যভাবে আরও সুবিধাজনক।

গুরুত্বপূর্ণ সম্পাদনা: আরও গবেষণার পরে, আমি দেখতে পেয়েছি যে একটি স্ক্রিপ্টিং ভাষার সংজ্ঞা নিয়ে আরও অনেক বিতর্ক রয়েছে (দেখুন ওস্টারহাউটের দ্বৈতত্ত্ব )। কোনও ভাষাকে "স্ক্রিপ্টিং ল্যাঙ্গুয়েজ" হিসাবে সংজ্ঞায়িত করার প্রাথমিক সমালোচনাটি হ'ল এটি সিনট্যাক্স বা ভাষার শব্দার্থবিজ্ঞানের পক্ষে তা তাত্পর্যপূর্ণ নয় যা এর ব্যাখ্যা বা সংকলন করা হয়।

যে ভাষাগুলি সাধারণত "স্ক্রিপ্টিং ভাষাগুলি" হিসাবে বিবেচিত হয় সাধারণত সংকলন না করে traditionতিহ্যগতভাবে ব্যাখ্যা করা হয়, "স্ক্রিপ্টিং ভাষা" হিসাবে তাদের সংজ্ঞাটি দীর্ঘ এবং সংক্ষিপ্তভাবে সত্যই লোকেরা কীভাবে তাদের দেখায় এবং তাদের নির্মাতারা কীভাবে তাদের সংজ্ঞায়িত করে তার সংমিশ্রণে এটি নির্ভর করে।

সাধারণভাবে বলতে গেলে কোনও ভাষা সহজেই একটি স্ক্রিপ্টিং ভাষা হিসাবে বিবেচিত হতে পারে (ধরে নিলে আপনি ওস্টারহাউটের দ্বৈতত্ত্বের সাথে একমত হন) যদি এটি নিম্নোক্ত মানদণ্ডগুলি পূরণ করে (উপরের নিবন্ধটি অনুযায়ী, উপরে):

  • তারা গতিশীল টাইপ করা হয়
  • জটিল ডেটা স্ট্রাকচারের জন্য তাদের কাছে খুব কম বা কোনও বিধান নেই
  • তাদের মধ্যে প্রোগ্রাম (স্ক্রিপ্ট) ব্যাখ্যা করা হয়

অধিকন্তু, এটি প্রায়শই গৃহীত হয় যে কোনও ভাষা হ'ল একটি স্ক্রিপ্টিং ভাষা যদি এটি অন্য প্রোগ্রামিং ভাষার (সাধারণত স্ক্রিপ্টিং ভাষা হিসাবে বিবেচিত হয় না ) পাশাপাশি কাজ করার জন্য এবং ডিজাইন করা হয় ।


1
আমি প্রথম লাইনে আপনার সাথে একমত নই যেখানে আপনি "স্ক্রিপ্টিং ভাষাগুলি সংকলিত নয়" লিখেছেন। লুয়া আসলে একটি জেআইটি সংকলক দ্বারা মৃত্যুদন্ড কার্যকর করার আগে মধ্যবর্তী বাইটকোডে সংকলিত হয়েছিল। কিছু অবশ্যই লাইন বাই লাইন ব্যাখ্যা করা হয়, কিন্তু সব না।
গ্ল্যাম্পার্ট

আমি আপনার "স্ক্রিপ্টিং ভাষা" সংজ্ঞার সাথে একমত নই। দ্বৈত ব্যবহারের মতো ভাষা রয়েছে (যেমন লুয়া, বা সি #) যা তুলনামূলকভাবে সাধারণত তাদের সংকলিত আকারে স্ক্রিপ্ট ফর্মের পরিবর্তে ব্যবহৃত হয় (বা বিপরীতে যেমন সি # এর ক্ষেত্রে হয়)। যখন কোনও ভাষা স্ক্রিপ্টিং ভাষা হিসাবে ব্যবহৃত হয়, তখন এটি কঠোরভাবে এমন ভাষা হিসাবে সংজ্ঞায়িত হয় যা ব্যাখ্যা করা হয়, এবং সংকলিত হয় না।
গুরগাদুর্গেন

যথেষ্ট উপযুক্ত, আপনার সংজ্ঞা উইকিপিডিয়ায় আরও ইনলাইন: "একটি স্ক্রিপ্টিং ভাষা বা স্ক্রিপ্ট ভাষা হ'ল একটি প্রোগ্রামিং ভাষা যা স্ক্রিপ্টগুলিকে সমর্থন করে, একটি বিশেষ রান-টাইম পরিবেশের জন্য রচিত প্রোগ্রাম যা ব্যাখ্যা করতে পারে (সংকলন না করে) ...", কিছু মনে করবেন না আমার মন্তব্য তারপর।
গ্ল্যাম্পার্ট

1
এমনকি নিয়মিত লুয়া পুরোপুরি বাইটোকোডে সংকলিত হয়, জেআইটি সংকলক এমনকি দেশীয় বাইনারি তৈরি করতে পারে। সুতরাং না, লুয়া ব্যাখ্যা করা হয় না।
ওলেগ ভি। ভলকভ

প্রথম অংশটি ইফফায়, আমি ডাউনওয়েতে প্রলুব্ধ। তিনি একধরনের সত্য যে এটি শেষ পর্যন্ত ব্যাখ্যা করা হয় এবং @ ওলেগভি.ভলকভ জেআইটি সংকলন কিছু সংকলন করে না। সংকলন সংকলন সময় দ্বারা সংজ্ঞায়িত করা হয়, যা লুয়া আছে, লুয়া বাইট-কোড না (JIT বা JIT নয়)। আমাদের শব্দটি মিশ্রিত না করে।
আলেক টিল
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.