আমি সি # তে লিখিত একটি প্রোগ্রামের ভিতরে লোকেরা জাভা স্ক্রিপ্ট বা পাইথন (বা কিছু) ব্যবহার করার বিভিন্ন পরিস্থিতিতে শুনেছি। জাভাস্ক্রিপ্টের মতো ভাষা যখন কোনও সি # প্রোগ্রামে কিছু করার জন্য ব্যবহার করা আরও ভাল হবে তবে কেবল সি # তে এটি করা?
আমি সি # তে লিখিত একটি প্রোগ্রামের ভিতরে লোকেরা জাভা স্ক্রিপ্ট বা পাইথন (বা কিছু) ব্যবহার করার বিভিন্ন পরিস্থিতিতে শুনেছি। জাভাস্ক্রিপ্টের মতো ভাষা যখন কোনও সি # প্রোগ্রামে কিছু করার জন্য ব্যবহার করা আরও ভাল হবে তবে কেবল সি # তে এটি করা?
উত্তর:
যখন আপনার এমন আচরণ হয় যে আপনি পরিবর্তন করতে চাইলে প্রোগ্রামটি পুনরায় সংকলন করতে চান না। ঠিক এ কারণেই অনেকগুলি গেম লুয়াকে স্ক্রিপ্টিং / মোডিং ভাষা হিসাবে ব্যবহার করে।
এই কৌশলটি মূল লজিক প্রয়োগ করতে ব্যবহার করা যেতে পারে যা বিভিন্ন ভাষার পরিবেশের মধ্যে সহজেই বহনযোগ্য। উদাহরণস্বরূপ, আমার কাছে একটি ক্যালকুলেটর সিমুলেটর রয়েছে যেখানে সমস্ত অভ্যন্তরীণ ক্যালকুলেটর যুক্তি 100% জাভাস্ক্রিপ্টে প্রয়োগ করা হয়। ইউজার ইন্টারফেস কোড অবশ্যই প্রতিটি প্ল্যাটফর্মের জন্য পৃথক:
এই ব্যবস্থা সহ, বিভিন্ন অপারেটিং পরিবেশের জন্য আমার প্রোগ্রামটির সংস্করণগুলি তৈরি করা এবং বিশেষত সেগুলি আপ টু ডেট রাখা অনেক সহজ।
খুব বিস্তৃতভাবে দুটি পরিস্থিতি রয়েছে যেখানে আপনি এই প্যাটার্নটি প্রয়োগ করবেন:
অন্ত
এখানে উদাহরণ হিসাবে অ্যাডোব লাইটরুমে লুয়া ব্যবহৃত হবে।
সুতরাং আমরা লুয়ার সাথে যা করি তা মূলত ইউআই চালানো থেকে শুরু করে আমরা ডাটাবেসে কী করি তা পরিচালনা করার জন্য সমস্ত অ্যাপ্লিকেশন যুক্তিযুক্ত। অ্যাপ্লিকেশনটিতে কোডের প্রতিটি অংশ যা সিদ্ধান্ত নেওয়া বা বৈশিষ্ট্যগুলি প্রয়োগ করা হিসাবে বর্ণনা করা যেতে পারে সেগুলি লাউতে থাকে যতক্ষণ না আপনি কাঁচা প্রক্রিয়াকরণে নামেন, যা সি ++ এ রয়েছে। ( মার্ক হামবুর্গ সাক্ষাত্কার: অ্যাডোব ফটোশপ লাইটরুম )
বাহ্যিকভাবে
আইবিএম তাদের মেইনফ্রেম অপারেটিং সিস্টেম ভিএম-সিএমএসে খুব সফলভাবে স্ক্রিপ্টিং ভাষা ব্যবহার করে । এক্সইসি , এক্সইসি / ২ এবং পরে রেএক্সএক্স অভ্যন্তরীণ এবং বাহ্যিকভাবে পুরো সিস্টেম জুড়ে ব্যবহৃত হয়েছিল। বিভিন্ন অ্যাপ্লিকেশন (যেমন এক্সইডিআইটি ) সেই একই ভাষা ব্যবহার করে স্ক্রিপ্টযোগ্য ছিল এবং অভ্যন্তরীণ অ্যাপ্লিকেশন / ইউটিলিটিস (উদাহরণস্বরূপ ই-মেইল) স্ক্রিপ্টিং ভাষায় লিখিত ছিল এবং ওএস এবং অন্যান্য সরঞ্জামগুলির সাথে দৃ integ় সংহতকরণের সুবিধা অর্জন করেছিল। গ্রাহকরা অনেক স্ক্রিপ্টেড সরঞ্জাম এবং অ্যাপ্লিকেশন তৈরি এবং ভাগ করেছেন। ডিসিও ডিসিএল সরবরাহ করেছিল । পরে মাইক্রোসফ্ট তাদের বেশিরভাগ অ্যাপ্লিকেশনগুলিতে এবং সাম্প্রতিকতম পাওয়ারশেলের ভিপিস্ক্রিপ্টকে স্ক্রিপ্টিং ভাষা হিসাবে সমর্থন করেছিল(এছাড়াও এমএস / ডস ব্যাচের ফাইলগুলি)। ইউনিক্স শেলেরও স্ক্রিপ্টিং রয়েছে।
প্রবণতাটি আজ কোনও উপায়ে এপিআইগুলি প্রকাশ করে এবং স্ক্রিপ্টিং ভাষার পছন্দটি এমন ব্যবহারকারীদের উপর ছেড়ে দেয় যারা পৃথক বাইন্ডিং বা এপিআই অ্যাক্সেসের অন্যান্য উপায় ব্যবহার করতে পারে।
বাস্তব বিশ্বের উদাহরণ অন্তর্ভুক্ত করবে: -
বেশিরভাগ ওয়েব ব্রাউজার যা এম্বেড করা জাভাস্ক্রিপ্ট সমর্থন করবে।
মাইক্রোসফ্ট অফিস স্যুট - এক্সেল ওয়ার্ড ইত্যাদি সমস্ত এম্বেড করা ভিবিএ স্ক্রিপ্ট সমর্থন করে।
অনেকগুলি নেটওয়ার্ক রাউটারগুলির মধ্যে স্ক্রিপ্ট এপিআই রয়েছে, বিভিন্ন ভাষায় টিসিএল, পার্ল, লুয়া।
অনেক এম্বেড থাকা ডিভাইসগুলি কোর সি ফাংশনের একটি খুব ছোট সেট ব্যবহার করে প্রয়োগ করা হয় যা লুয়ার মতো স্ক্রিপ্টিং ভাষা ব্যবহার করে একসাথে আটকানো হয়। সুতরাং আপনার কাছে ছোট, দ্রুত সি ক্রিয়াকলাপগুলির একটি সেট রয়েছে যা হার্ডওয়্যারের সাথে ইন্টারেক্ট করে এবং বেশিরভাগ নিয়ন্ত্রণ যুক্তিটি একটি নমনীয়, স্ক্রিপ্টিং ল্যাংকে সংশোধন করা সহজ in
কখনও কখনও স্ক্রিপ্টিং কোনও অ্যাপ্লিকেশনটিতে এম্বেড থাকে কারণ এটি অন্য বিকাশকারীদের দ্বারা হোস্ট অ্যাপ্লিকেশনটি প্রসারিত করার মাধ্যম। যথাসম্ভব বিস্তৃত প্রোগ্রামিং ভাষার দক্ষতা অর্জনের জন্য, একাধিক স্ক্রিপ্টিং ভাষা হোস্ট দ্বারা সমর্থিত হতে পারে। উদাহরণস্বরূপ, জেভিএম-এ, আপনি পাইথন, রুবি, জাভাস্ক্রিপ্ট, ইত্যাদি সহ জেএসআর -২২৩ অনুবর্তী ভাষা পুরোপুরি এম্বেড করতে পারেন
ইতিমধ্যে উল্লেখ করা হয়নি এমন আরও একটি কারণ হ'ল এম্বেড করা ভাষার একটি বা একাধিক স্ট্যান্ডআউট বৈশিষ্ট্য রয়েছে যা হোস্ট ভাষাটি সহজে নকল করতে পারে না। এর উদাহরণ হ'ল পার্স কার্যকারিতা বা অনায়াস ডিএসএল (ডোমেন নির্দিষ্ট ভাষা / উপভাষা) তৈরি যা রেবলের মতো ভাষায় পাওয়া যায়।
অ্যাপ্লিকেশনটির ভিতরে স্ক্রিপ্টিং ভাষা ব্যবহারের একটি আকর্ষণীয় উপায় রয়েছে যা অন্যরা এখনও উল্লেখ করেনি।
আপনার হোস্ট ভাষার যদি সমৃদ্ধ, প্রতিবিম্বিত রানটাইম থাকে তবে এটি আপনার অ্যাপ্লিকেশনগুলিতে আরপিএল সহ একটি সহজ ভাষা এম্বেড করার জন্য কার্যকর হয়, এটি একটি সকেটে নকল করে এবং এটি পুরো সিস্টেমে অ্যাক্সেস দেয়।
এটি একটি ইন্টারেক্টিভ ডিবাগিংয়ের জন্য ব্যবহার করা যেতে পারে (এবং এটি প্রাকৃতিকভাবে আপনার স্বাভাবিক ডিবাগারের চেয়ে অনেক বেশি শক্তিশালী), হট কোড প্যাচিং, বিভিন্ন পর্যবেক্ষণের উদ্দেশ্যে এমনকি বাড়ির বাইরেও (যদি আপনি ভাল না হন)।
আমার নির্দিষ্ট পরিস্থিতি, যখন আমি কোনও বড় অ্যাপ্লিকেশনটিতে ব্যাখ্যাযুক্ত স্ক্রিপ্টিং ভাষা ব্যবহার করি:
একটি বাহ্যিক ডিভাইস রয়েছে যা বেশ কয়েকটি ফাংশন সম্পাদন করে। পরিমাপ, নিয়ন্ত্রণ, পাঠ্যক্রম। এটি নিজেই বেশ "বোবা" এবং সঠিক ব্যবস্থাপনার দরকার হয়, ধাপে ধাপে অনেকগুলি অপেক্ষার রাজ্য এবং নিয়ন্ত্রণ ব্যবস্থাটির পক্ষে অ্যাড-হক সিদ্ধান্ত গ্রহণ সহ।
ডিভাইসের বিভিন্ন কার্যকারিতা মূল অ্যাপ্লিকেশনের বিভিন্ন পয়েন্টে, বিভিন্ন সময়ে, প্রায়শই অন-ডিমান্ডের প্রয়োজন হয়। মূল অ্যাপটি ওয়েট স্টেটগুলির জন্য যেমন মঞ্জুরি দেয় না, সীমাবদ্ধ রাষ্ট্রের মেশিন দিয়ে সবকিছুই করাতে হবে।
এখন যে কেউ একটি সসীম রাষ্ট্রের মেশিন লিখেছেন তিনি জানেন যে অপেক্ষার স্থিতি প্রয়োগ করা কার্যকরভাবে মেশিনের কমপক্ষে দুটি, প্রায় তিন বা চারটি অভ্যন্তরীণ অবস্থা কার্যকর হয়। বাহ্যিক ডিভাইসের বিভিন্ন ক্রিয়াকলাপের জন্য বিশ ওয়েট-স্টেট প্রয়োগ করা (এবং তাদের প্রতিক্রিয়াগুলির জন্য অপেক্ষা করা এবং সেই অনুযায়ী প্রতিক্রিয়া জানানো) একটি খুব, খুব হতাশার অভিজ্ঞতা হবে।
সুতরাং, পরিবর্তে সীমাবদ্ধ রাষ্ট্রের মেশিনে "একটি অপেক্ষার ক্রিয়াকলাপটি কার্যকর করুন", "একটি ব্লকিং ফাংশন সম্পাদন করুন", "একটি শাখা পরিচালনা / শর্তসাপেক্ষ / জাম্প করুন" ফাংশন রয়েছে, সম্ভবত মোট ছয়টি রাজ্য রয়েছে states এবং এমন কন্ট্রোল স্ক্রিপ্টগুলি রয়েছে যা মৃত্যুদন্ডের জন্য নির্ধারিত হয়, তারপরে বাহ্যিক ডিভাইসকে নিয়ন্ত্রণ করে দোভাষী দ্বারা কার্যকর করা হয় এবং তাদের ফলাফলগুলি যেখানে প্রয়োজন হয় সেখানে স্থাপন করা হয়।
সংক্ষেপে, অ্যাপ্লিকেশন: একটি আরটিওএসে, একটি অভ্যন্তরীণ ব্যাখ্যামূলক স্ক্রিপ্টিং ভাষা ব্যবহার করা ওয়েট-স্টেটে প্রচুর পরিমাণে কার্য সম্পাদন করার জটিলতা হ্রাস করতে পারে (ব্লকিং ফাংশন)।
আমার অভিজ্ঞতা থেকে, আমরা একবার একটি বড় অ্যাপ্লিকেশন বিকাশ করেছি যা ইউনিকোডের সাথে সামঞ্জস্যপূর্ণ হতে "প্রাচীন" ল্যাঙ্গুর পুনর্লিখন করে। সি # তে করা হয়েছিল। আমি কেবল ইঞ্জিনটি লিখে শেষ করেছি (যা একটি ডেটা মডেল তৈরি করে এবং পুনর্লিখনের প্রক্রিয়াটির জন্য প্রয়োজনীয় পদক্ষেপগুলি করার উপায় সরবরাহ করে) C # - আসলে জিনিসগুলি সম্পাদন করার জন্য "আঠালো কোড" আইরনপাইথনে করা হয়।
ইন্টিগ্রেটেড আয়রন পাইথনের বৃহত্তম পয়েন্ট: ধরে নেওয়া যাক আপনি একটি বড় ডেটা মডেল (প্রায় এক ঘন্টা লোড সময়) লোড করেছেন। তারপরে আপনি নিজে-তথ্য সংগ্রহ করতে এবং জিনিসগুলি সন্ধান করতে চান। ইন্টারেক্টিভ কনসোল থেকে পাইথন স্ক্রিপ্টের সাহায্যে এটি ডিবাগার (প্লাস, এটি পুনরায় খেলতে সক্ষম) এর সাহায্যে ডেটা মডেলটি ক্লিক করার চেয়ে অনেক বেশি ভাল।
কয়েকটি কারণ রয়েছে।
কখন? 1948 এবং 2008-এর মধ্যে - প্রাথমিকভাবে সংকলিত ভাষাগুলি সংকলন এবং লিঙ্ক করতে উল্লেখযোগ্য সময় নিয়েছিল, তাই ব্যবহারকারীদের কাস্টমাইজেশন এবং কনফিগারেশনকে অনুমতি দেওয়ার জন্য স্ক্রিপ্টিং ভাষা তৈরি করা সাধারণ বিষয় ছিল। যদি আপনি অটোলিস্পের ইতিহাসের দিকে তাকান তবে উত্তরটি প্রথমে এর মধ্যে একটি স্ক্রিপ্টিং ভাষা দিয়ে অটোক্যাড প্রেরণ করা হয়, তবে এটি এনবি এর পরে স্ক্রিপ্টযোগ্য ইন্টারফেসটি এক্সপ্লোর করার পক্ষে হয়ে দাঁড়িয়েছিল was
সিএলআর দিয়ে, একটি সি # প্রোগ্রাম বা একটি লুয়া প্রোগ্রাম কলকে একটি বিদ্যমান সিস্টেমে সক্ষম করা বিকাশের ব্যয়গুলিতে উল্লেখযোগ্যভাবে পৃথক নয় এবং ফ্লাইটে জেনারেট এবং সংকলনের সরঞ্জামগুলির সাথে। নেট রানটাইম জাহাজগুলি।
বৃহত্তর প্রোগ্রামের মধ্যে আপনার আর স্ক্রিপ্টিং ভাষা থাকার দরকার নেই , বরং পরিবর্তে বৃহত্তর প্রোগ্রামটি রানটাইমের স্ক্রিপ্টিং সুবিধার জন্য উন্মুক্ত করুন।
যে সমস্ত পরিবেশে ফ্লাই কোড জেনারেশন এবং সংকলন সরবরাহ করে না, এবং এটি কোনও ডোমেন নির্দিষ্টের চেয়ে সাধারণ-উদ্দেশ্যে অটোমেশন ভাষা সরবরাহ করা পছন্দসই হিসাবে দেখা যায়, আপনি এখনও লুয়া বা পাইথন স্ক্রিপ্টিং পাবেন। কোনও সিওএম ইন্টারফেস সরবরাহকারী সরঞ্জামগুলির জন্য, তবে সেই স্ক্রিপ্টিং ভাষাটি হবে সি # বা ভিবি নেট (এমএস অফিস, স্পারেক্স এন্টারপ্রাইজ আর্কিটেক্ট)। সুতরাং কোনও প্রোগ্রামে স্ক্রিপ্টিং ভাষা থাকা একটি ভাষায় লিখিত যা নিজেই সরল একটি স্ক্রিপ্টিং ভাষা হওয়ার জন্য এটি অপ্রয়োজনীয়।