অনুবাদক প্রোগ্রাম: কম্পাইলার, ইন্টারপ্রিটার ও অ্যাসেম্বলার
এইচএসসি আইসিটি: অনুবাদক প্রোগ্রাম কী? কম্পাইলার, ইন্টারপ্রিটার ও অ্যাসেম্বলারের বিস্তারিত আলোচনা, পার্থক্য এবং সুবিধা-অসুবিধা।
অনুবাদক প্রোগ্রাম: কম্পাইলার, ইন্টারপ্রিটার ও অ্যাসেম্বলার
- অনুবাদক প্রোগ্রাম: কম্পাইলার, ইন্টারপ্রিটার ও অ্যাসেম্বলার
- মানুষের ভাষা vs কম্পিউটারের ভাষা
- অনুবাদক প্রোগ্রাম (Translator Program) কী?
- কম্পাইলার (Compiler)
- কম্পাইলারের সুবিধা ও অসুবিধা
- ইন্টারপ্রিটার (Interpreter)
- ইন্টারপ্রিটারের সুবিধা ও অসুবিধা
- অ্যাসেম্বলার (Assembler)
- কম্পাইলার বনাম ইন্টারপ্রিটার: পার্থক্য
- কোনটি ব্যবহার করব?
- সারসংক্ষেপ
অনুবাদক প্রোগ্রাম: কম্পাইলার, ইন্টারপ্রিটার ও অ্যাসেম্বলার - বিস্তারিত আলোচনা ও পরীক্ষার প্রস্তুতি
মানুষের ভাষা এবং যন্ত্রের ভাষার মধ্যে একটি মৌলিক পার্থক্য রয়েছে। মানুষ চিন্তা করে এবং প্রকাশ করে বাংলা, ইংরেজি বা অন্য কোনো ভাষায়, যাকে আমরা হাই-লেভেল ল্যাঙ্গুয়েজ বলি। কিন্তু কম্পিউটার বা ইলেকট্রনিক যন্ত্র একমাত্র বৈদ্যুতিক সংকেত বা বাইনারি ভাষা (0 এবং 1) বুঝতে পারে। এই ভাষাগত দূরত্বের কারণেই আমরা সরাসরি কম্পিউটারের সাথে যোগাযোগ করতে পারি না।
যদি আপনার কোনো জাপানি বন্ধু থাকে এবং আপনি জাপানি ভাষা না জানেন, তবে আপনাদের মধ্যে ভাব বিনিময়ের জন্য একজন দোভাষীর প্রয়োজন হবে। ঠিক একইভাবে, আমাদের লেখা প্রোগ্রাম বা নির্দেশগুলোকে কম্পিউটারের বোধগম্য মেশিন ভাষায় রূপান্তর করার জন্য বিশেষ এক ধরণের সফটওয়্যারের প্রয়োজন হয়। এই সফটওয়্যারটিই হলো অনুবাদক প্রোগ্রাম। আজকের এই নোটে আমরা অনুবাদক প্রোগ্রাম, কম্পাইলার, ইন্টারপ্রিটার এবং অ্যাসেম্বলার সম্পর্কে বিস্তারিত জানব যা পরীক্ষার জন্য অত্যন্ত গুরুত্বপূর্ণ।
অনুবাদক প্রোগ্রাম (Translator Program)
কম্পিউটার একমাত্র মেশিন ভাষা বা যান্ত্রিক ভাষা বুঝতে পারে। অন্য যেকোনো ভাষায় (যেমন: C, C++, Java, Python) লেখা প্রোগ্রামকে কম্পিউটার সরাসরি নির্বাহ করতে পারে না। হাই-লেভেল বা অ্যাসেম্বলি ভাষায় লেখা প্রোগ্রামকে মেশিন ভাষায় রূপান্তর করার জন্য যে বিশেষ প্রোগ্রাম ব্যবহৃত হয়, তাকে অনুবাদক প্রোগ্রাম বলে।
সংজ্ঞা (Definition): যে সফটওয়্যার বা প্রোগ্রাম উৎস প্রোগ্রামকে (Source Program) বস্তু প্রোগ্রামে (Object Program) রূপান্তর করে, তাকে অনুবাদক প্রোগ্রাম (Translator Program) বলে।
এখানে দুটি গুরুত্বপূর্ণ ধারণা পরিষ্কার থাকা প্রয়োজন:
গুরুত্বপূর্ণ (Important):
- উৎস প্রোগ্রাম (Source Program): ব্যবহারকারী বা প্রোগ্রামারের লেখা হাই-লেভেল বা অ্যাসেম্বলি ভাষার প্রোগ্রামকে সোর্স প্রোগ্রাম বা সোর্স কোড বলা হয়।
- বস্তু প্রোগ্রাম (Object Program): অনুবাদক প্রোগ্রামের মাধ্যমে সোর্স কোডকে মেশিন ভাষায় (0 ও 1) রূপান্তর করার পর যে কোড পাওয়া যায়, তাকে অবজেক্ট প্রোগ্রাম বা অবজেক্ট কোড বলা হয়।
অনুবাদক প্রোগ্রাম প্রধানত তিন প্রকার:
১. কম্পাইলার (Compiler)
২. ইন্টারপ্রিটার (Interpreter)
৩. অ্যাসেম্বলার (Assembler)
কম্পাইলার (Compiler)
কম্পাইলার হলো এমন এক ধরণের অনুবাদক প্রোগ্রাম যা সম্পূর্ণ সোর্স প্রোগ্রামটিকে একত্রে পড়ে এবং একসাথে মেশিন ভাষায় রূপান্তর করে। এটি হাই-লেভেল ল্যাঙ্গুয়েজে লেখা প্রোগ্রামকে (যেমন C, C++) মেশিন ল্যাঙ্গুয়েজে পরিণত করে।
সংজ্ঞা (Definition): যে অনুবাদক প্রোগ্রাম সম্পূর্ণ সোর্স প্রোগ্রামকে বা উৎস কোডকে একসাথে পড়ে এবং পূর্ণাঙ্গভাবে মেশিন ভাষায় রূপান্তর করে অবজেক্ট ফাইল তৈরি করে, তাকে কম্পাইলার বলে।
কম্পাইলারের কাজের ধাপগুলো বেশ জটিল। এটি প্রধানত দুটি ধাপে কাজ করে—প্রথমত, সোর্স কোড বিশ্লেষণ (Analysis) এবং দ্বিতীয়ত, মেশিন কোড তৈরি (Synthesis)। বিশ্লেষণের সময় লেক্সিক্যাল অ্যানালাইসিস (শব্দ বা টোকেন শনাক্তকরণ), সিনট্যাক্স অ্যানালাইসিস (ব্যাকরণগত শুদ্ধতা যাচাই) এবং সিমান্টিক অ্যানালাইসিস (অর্থপূর্ণতা যাচাই) সম্পন্ন হয়।
কম্পাইলারের বৈশিষ্ট্য ও সুবিধা
- গতি: যেহেতু এটি পুরো প্রোগ্রামটি একবারেই অনুবাদ করে এবং অবজেক্ট ফাইল (.obj বা .exe) তৈরি করে রাখে, তাই পরবর্তী সময়ে প্রোগ্রামটি চালানোর জন্য পুনরায় অনুবাদের প্রয়োজন হয় না। ফলে প্রোগ্রাম নির্বাহের গতি বেশি হয়।
- ভুল নির্ণয়: কম্পাইলার সম্পূর্ণ প্রোগ্রামটি পড়ার পর ভুলের তালিকা (Error List) একসাথে প্রদর্শন করে।
- মেমোরি: অবজেক্ট ফাইল তৈরির জন্য মেমোরিতে অতিরিক্ত জায়গার প্রয়োজন হয়।
মনে রাখার টিপস (Tip): কম্পাইলার = Complete (সম্পূর্ণ)। অর্থাৎ, এটি সম্পূর্ণ কোড একসাথে অনুবাদ করে। উদাহরণ: C, C++, Pascal, Fortran ইত্যাদি ভাষার জন্য কম্পাইলার ব্যবহৃত হয়।
ইন্টারপ্রিটার (Interpreter)
ইন্টারপ্রিটারও হাই-লেভেল ল্যাঙ্গুয়েজকে মেশিন ল্যাঙ্গুয়েজে রূপান্তর করে, তবে এর কাজের পদ্ধতি কম্পাইলারের চেয়ে ভিন্ন। এটি পুরো প্রোগ্রামটি একসাথে অনুবাদ না করে লাইন বাই লাইন (Line by Line) অনুবাদ করে এবং সাথে সাথে কার্যকর করে।
সংজ্ঞা (Definition): যে অনুবাদক প্রোগ্রাম সোর্স প্রোগ্রামের নির্দেশগুলোকে একটি একটি করে লাইন বা স্টেটমেন্ট আকারে পড়ে, অনুবাদ করে এবং তাৎক্ষণিকভাবে কার্যকর করে, তাকে ইন্টারপ্রিটার বলে।
ইন্টারপ্রিটার কোনো স্থায়ী অবজেক্ট ফাইল তৈরি করে না। তাই প্রতিবার প্রোগ্রামটি চালানোর সময় নতুন করে অনুবাদের প্রয়োজন হয়।
ইন্টারপ্রিটারের বৈশিষ্ট্য ও সুবিধা
- ডিবাগিং সুবিধা: প্রোগ্রাম চালানোর সময় কোনো লাইনে ভুল থাকলে ইন্টারপ্রিটার সেখানেই থেমে যায় এবং ভুলের বার্তা দেয়। এটি নতুন শিক্ষার্থীদের জন্য প্রোগ্রামিং শেখা এবং ভুল সংশোধন (Debugging) সহজ করে তোলে।
- মেমোরি: যেহেতু এটি কোনো অবজেক্ট ফাইল তৈরি করে না, তাই মেমোরিতে কম জায়গার প্রয়োজন হয়।
- গতি: একই কোড বা লুপ বারবার চললে প্রতিবারই নতুন করে অনুবাদ করতে হয় বলে এর কার্যকারিতা বা নির্বাহের গতি কম্পাইলারের চেয়ে ধীর।
উদাহরণ: Python, Ruby, PHP, BASIC ইত্যাদি ভাষায় ইন্টারপ্রিটার ব্যবহৃত হয়।
পার্থক্য: কম্পাইলার বনাম ইন্টারপ্রিটার
পরীক্ষায় এই দুইয়ের পার্থক্য প্রায়ই আসে। নিচে একটি তুলনামূলক ছক দেওয়া হলো যা মুখস্থ রাখা জরুরি।
| বৈশিষ্ট্য | কম্পাইলার (Compiler) | ইন্টারপ্রিটার (Interpreter) |
|---|---|---|
| কাজের ধরণ | সম্পূর্ণ প্রোগ্রামটি একসাথে অনুবাদ করে। | প্রোগ্রামটি লাইন বাই লাইন বা ধাপে ধাপে অনুবাদ করে। |
| অবজেক্ট ফাইল | এটি পূর্ণাঙ্গ অবজেক্ট ফাইল (.exe বা .obj) তৈরি করে। | এটি কোনো অবজেক্ট ফাইল তৈরি করে না। |
| গতি | প্রোগ্রাম নির্বাহের গতি বেশি (Fast)। | প্রোগ্রাম নির্বাহের গতি কম বা ধীর (Slow)। |
| ভুল প্রদর্শন | সব ভুল একসাথে প্রদর্শন করে, তাই ভুল সংশোধন কিছুটা কঠিন হতে পারে। | প্রথম ভুলটি পাওয়ার সাথে সাথেই থেমে যায়, তাই ভুল সংশোধন সহজ। |
| মেমোরি | অবজেক্ট ফাইল রাখার জন্য বেশি মেমোরি প্রয়োজন হয়। | অবজেক্ট ফাইল তৈরি করে না বলে কম মেমোরি প্রয়োজন হয়। |
| ব্যবহার | বড় এবং জটিল প্রজেক্টের জন্য উপযোগী। | প্রোগ্রামিং শেখা এবং ছোট প্রজেক্টের জন্য উপযোগী। |
অ্যাসেম্বলার (Assembler)
কম্পিউটারের শুরুর দিকে প্রোগ্রামাররা বাইনারি কোড মনে রাখতে পারতেন না, তাই তারা বাইনারির পরিবর্তে কিছু সাঙ্কেতিক চিহ্ন বা নেমোনিক (Mnemonic) ব্যবহার করে প্রোগ্রাম লিখতেন। এই ভাষাকে বলা হয় অ্যাসেম্বলি ভাষা। অ্যাসেম্বলি ভাষায় লেখা প্রোগ্রামকে মেশিন ভাষায় রূপান্তরের জন্য অ্যাসেম্বলার ব্যবহৃত হয়।
সংজ্ঞা (Definition): যে অনুবাদক প্রোগ্রাম অ্যাসেম্বলি ভাষায় লেখা প্রোগ্রামকে (নেমোনিক কোড) মেশিন ভাষায় রূপান্তর করে, তাকে অ্যাসেম্বলার বলে।
উদাহরণ (Example):
ধরি, অ্যাসেম্বলি ভাষায় আমরা লিখলাম MOV AX, 5 (অর্থাৎ AX রেজিস্টারে 5 মানটি রাখো)।
অ্যাসেম্বলার এটিকে অনুবাদ করে কম্পিউটারের জন্য 1011 1000 0000 0101 এর মতো বাইনারি কোডে রূপান্তর করবে।
অ্যাসেম্বলারের প্রধান কাজ হলো নেমোনিক কোডকে (যেমন: ADD, SUB, MOV, JMP) মেশিন কোডে (Opcode) রূপান্তর করা এবং মেমোরি অ্যাড্রেস বা লেবেলগুলোকে প্রকৃত মেমোরি লোকেশনে ম্যাপ করা।
প্রোগ্রাম নির্বাহের পূর্ণাঙ্গ প্রক্রিয়া: লিঙ্কার ও লোডার
শুধুমাত্র কম্পাইল করলেই একটি প্রোগ্রাম রান করার উপযোগী হয় না। সোর্স কোড থেকে এক্সিকিউটেবল ফাইল তৈরি এবং তা রান করার পেছনে আরও দুটি গুরুত্বপূর্ণ সিস্টেম সফটওয়্যার কাজ করে—লিঙ্কার এবং লোডার।
লিঙ্কার (Linker)
বড় প্রোগ্রামগুলো সাধারণত একাধিক ছোট ছোট ফাইলে বিভক্ত থাকে। কম্পাইলার প্রতিটি ফাইলকে আলাদাভাবে অবজেক্ট ফাইলে রূপান্তর করে। লিঙ্কারের কাজ হলো এই বিভিন্ন অবজেক্ট ফাইল এবং প্রয়োজনীয় লাইব্রেরি ফাংশনগুলোকে (যেমন printf, scanf এর কোড) একত্রে যুক্ত করে (Link) একটি একক এক্সিকিউটেবল ফাইল (.exe) তৈরি করা।
সংজ্ঞা (Definition): যে প্রোগ্রাম এক বা একাধিক অবজেক্ট ফাইল এবং লাইব্রেরি ফাইলকে যুক্ত করে একটি পূর্ণাঙ্গ এক্সিকিউটেবল প্রোগ্রাম তৈরি করে, তাকে লিঙ্কার বলে।
লোডার (Loader)
লিঙ্কার এক্সিকিউটেবল ফাইল তৈরি করে হার্ড ডিস্কে জমা রাখে। কিন্তু প্রোগ্রাম রান করার জন্য সেটিকে কম্পিউটারের প্রধান মেমোরি বা র্যামে (RAM) আনতে হয়। এই কাজটি করে লোডার।
সংজ্ঞা (Definition): যে সিস্টেম সফটওয়্যার এক্সিকিউটেবল ফাইলকে সেকেন্ডারি মেমোরি (যেমন হার্ড ডিস্ক) থেকে মেইন মেমোরিতে (RAM) লোড করে এবং সিপিইউ (CPU)-কে প্রোগ্রামটি নির্বাহের নির্দেশ দেয়, তাকে লোডার বলে।
সংক্ষিপ্ত সারাংশ (Quick Revision)
একনজরে মনে রাখার বিষয়:
- অনুবাদক প্রোগ্রাম: ৩ প্রকার (কম্পাইলার, ইন্টারপ্রিটার, অ্যাসেম্বলার)।
- কম্পাইলার: পুরোটা একসাথে অনুবাদ করে, অবজেক্ট ফাইল তৈরি করে, দ্রুত কাজ করে (C, C++)।
- ইন্টারপ্রিটার: এক লাইন করে অনুবাদ করে, অবজেক্ট ফাইল নেই, ধীর কিন্তু ডিবাগিং সহজ (Python)।
- অ্যাসেম্বলার: অ্যাসেম্বলি ভাষাকে মেশিন ভাষায় রূপান্তর করে।
- সোর্স কোড: মানুষের লেখা কোড।
- অবজেক্ট কোড: মেশিনের ভাষা বা বাইনারি কোড।
- লিঙ্কার: ফাইল জোড়া লাগায়।
- লোডার: মেমোরিতে লোড করে।
পরীক্ষার টিপস (Exam Tips)
সৃজনশীল প্রশ্নের জন্য পরামর্শ:
- যদি প্রশ্ন আসে "C একটি কম্পাইল্ড ভাষা—ব্যাখ্যা কর", তবে কম্পাইলারের সংজ্ঞা এবং এর কার্যপদ্ধতি (একসাথে অনুবাদ ও অবজেক্ট ফাইল তৈরি) উল্লেখ করে উত্তর লিখবে।
- পার্থক্য লেখার সময় অবশ্যই ছক ব্যবহার করবে এবং অন্তত ৪টি পয়েন্ট লিখবে।
- উদ্দীপকে যদি বলা হয় "শিক্ষক ক্লাসে এমন একটি অনুবাদের কথা বললেন যা ভুল পেলেই থেমে যায়"—তবে সেটি হবে ইন্টারপ্রিটার।