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