Compiled Language vs Interpreted Language
Tags: c, compiler, interpreter, mdmarufsarker
Published: 2022-07-24 09:50:40

এই পর্বে আমরা কম্পাইল্ড ল্যাঙ্গুয়েজ বনাম ইন্টারপ্রেটেড ল্যাঙ্গুয়েজ সম্পর্কে জানবো।


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

এর মধ্যেও আবার লো লেভেল ল্যাঙ্গুয়েজ (মেশিন ল্যাঙ্গুয়েজ /বাইনারি ল্যাঙ্গুয়েজ),  মিড লেভেল ল্যাঙ্গুয়েজ এবং হাই লেভেল ল্যাঙ্গুয়েজ বলে একটা কথা আছে। 

যেসব ল্যাঙ্গুয়েজ এ কম্পিউটার এর খুব কাছাকাছি থেকে প্রোগ্রাম লিখা যায় সেগুলো মিড লেভেল ল্যাঙ্গুয়েজ। আপনার কাছে মনে হবে যে আপনি কম্পিউটার এর সামনাসামনি বসে তার সাথে কথা বলছেন। যেমন সি একটি মিড লেভেল ল্যাঙ্গুয়েজ। 

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

**এখন আপনার মনে প্রশ্ন জাগতে পারে যে এগুলা তো বুঝলাম কিন্তু এগুলো তো মেশিন ল্যাঙ্গুয়েজ নয় তাহলে কম্পিউটার কিভাবে এদের কোড গুলো বুঝে থাকে?**

কম্পিউটার সর্বদা মেশিন ল্যাঙ্গুয়েজ ই বুঝে থাকে। এখন মিড বা হাই লেভেল ল্যাঙ্গুয়েজ transpiler ব্যাবহার করে থাকে। যেগুলোর মূল কাজ ই হলো মিড বা হাই লেভেল ল্যাঙ্গুয়েজ এর কোড গুলোকে মেশিন ল্যাঙ্গুয়েজ / বাইনারি কোড এ রূপান্তর করা। এই transpiler নিয়ে ই আজকের আলোচনা। মূলত ২ ধরনের transpiler হয়ে থাকে। একটাকে বলে ইন্টারপ্রেটার অন্যটা কম্পাইলার। বর্তমানে JIT (Just in time) কম্পাইলার নামে নতুন একটি transpiler এর আগমন হয়েছে। আপাতত সেদিকে যাচ্ছি না।

## কম্পাইল্ড ল্যাঙ্গুয়েজ কি?
যে ল্যাঙ্গুয়েজ গুলো তার সোর্স কোড এর সমস্ত লাইন একসাথে কম্পাইল করে সেগুলোকে মেশিন ল্যাঙ্গুয়েজ এ রূপান্তর করে সেগুলোকে কম্পাইল্ড ল্যাঙ্গুয়েজ বলে। 

কিছু কম্পাইলার এর নাম: টার্বো কম্পাইলার(যেটি পূর্বে বহুল প্রচলিত ছিল), gcc কম্পাইলার (যেটি বর্তমানে সবাই ব্যাবহার করছে)

কিছু কম্পাইল্ড ল্যাঙ্গুয়েজ এর নাম: C, C++, Go, Fortran, Cobol, Java, Objective-C, Swift ইত্যাদি। 

### এখন আসি এটা কিভাবে কাজ করে সেই ব্যাপারে:
Compiled Language, Program এর সমস্ত কোড একবারে নিয়ে পরে সেটাকে রান করে। এক্ষেত্রে এটার এক্সিকিউশন বা কাজ শুরু হয় মেইন ফাংশন থেকে। C, C++ বা Go সবগুলোতেই একটা মেইন ফাংশন থাকে। সি বা সি প্লাস প্লাস এর ক্ষেত্রে প্রথমে প্রোগ্রাম কে build করে executable ফর্ম এ নিয়ে আসতে হয়ে। পরবর্তীতে সেই executable ফাইল টি রান করলেই আমাদের প্রোগ্রাম রান হয়ে যায়। যদি প্রোগ্রাম এ কোনো error থাকে তাহলে build করার সময় আমাদেরকে কম্পাইলার error টা ধরিয়ে দেয় যে কোথায় ভুল আছে যাতে আমরা সেটা সংশোধন করতে পারি।

যারা উইন্ডোজ ব্যবহার করে তারা সবাই একটা বিষয় খেয়াল করেছেন যে একটা সি ফাইল build করলে আর ও ২ টা ফাইল create হয়। একটা .o এবং অন্যটা .exe প্রথমটা ধরা অবজেক্ট ফাইল বুঝানো হয় আর পরেরটা ধারা executable file বুঝানো হয়। আর যারা লিনাক্স ব্যবহার করেন তাদের ক্ষেত্রে প্রোগ্রাম ফাইল build করলে একটা বাইনারি ফাইল create হয় যেটা পরে ./ দিয়ে রান করলেই হয়ে যায়। মূলত উইন্ডোজ এ যেটা .exe বা executable file Linux এ সেটা বাইনারি ফাইল। Compiled Language গুলো এসব কারণে অনেক ফাস্ট কাজ করে।

## ইন্টারপ্রেটেড ল্যাঙ্গুয়েজ কি?
যে ল্যাঙ্গুয়েজ গুলো তার সোর্স কোড এর সমস্ত কোড একসাথে এক্সিকিউট না করে লাইন বাই লাইন এক্সিকিউট করে সেগুলোকে ইন্টারপ্রেটেড ল্যাঙ্গুয়েজ বলে।

কিছু ইন্টারপ্রেটেড ল্যাঙ্গুয়েজ এর নাম যদি বলতে বলা হয় তাহলে লিস্ট এ চলে আসবে জাভাস্ক্রিপ্ট, পাইথন, Matlab। 

### এখন আসি এটা কিভাবে কাজ করে সেই ব্যাপারে:
Interpreted Language, Program এর সমস্ত কোড একবারে নিয়ে রান করে না। এটা লাইন বাই লাইন এক্সিকিউট করে। এখানে কোনো মেইন ফাংশন বেবহার করা mandatory থাকে না যেটা কম্পাইল্ড ল্যাঙ্গুয়েজ এ লাগতো। এটা প্রোগ্রাম এর প্রথম লাইন থেকে এক্সিকিউশন শুরু করে। অনেকটা এরকম যে প্রথম লাইন এক্সিকিউট করলো এবং তার রেজাল্ট টা দিল। পরের বার দ্বিতীয় লাইন এক্সিকিউট করলো এবং তার রেজাল্ট টা দিল। এভাবেই এই ল্যাঙ্গুয়েজ গুলো কাজ করে। এক্ষেত্রে কোনো executable file ও create হয় না। Python, JavaScript বা Matlab সবগুলোতেই এরকমটা হয়ে থাকে। এসব কারণে interpreted language গুলো কম্পাইল্ড ল্যাঙ্গুয়েজ থেকে slow কাজ করে।

বুঝতেই পারতেছেন একটা লাইন বাই লাইন এক্সিকিউট করে অন্যটা সম্পূর্ণ কোড একসাথে এক্সিকিউট করে। যার কারণে কম্পাইল্ড ল্যাঙ্গুয়েজ অনেক ফাষ্ট কাজ করে থাকে Interpreted Language গুলোর তুলনায়

ল্যাঙ্গুয়েজ সম্পর্কে আর ও বিস্তারিত জানতে এই [লিংক](https://en.wikipedia.org/wiki/List_of_programming_languages_by_type) টি ফলো করতে পারেন।

আজকের পর্ব এই পর্যন্তই থাকবে। পরবর্তী পর্বে আমরা দ্বিতীয় পর্বের লিখা Hello World program টা কিভাবে কাজ করতেসে সেটা নিয়ে বিস্তারিত জানবো। Stack Learner এর সাথে থাকার জন্য আপনাকে অসংখ্য ধন্যবাদ।