- Published on
কম্পাইলার পর্ব ০০
- Authors
- Name
- Ibtesum Reza Aninda
- @IbtesumAninda
I am currently working on my portfolio. You will get a more readable version of this article soon!
শুরুতে একটু টেকনিকাল আলাপ, শেষে হবে টেকনিকাল গল্প। FORTRAN এর গল্প, কম্পাইলারের গল্প, আরও অনেক কিছু।
যেই সিরিজটা লিখতে যাচ্ছি, সেটা আসলে অ্যালেক্স আইকেনের একটা কোর্স থেকে শেখা। উনি স্ট্যানফোর্ড ইউনিভার্সিটির একজন প্রফেসর। কোর্সটি ফ্রি। আমি লিংকটা আর্টিকেলের শেষে দিয়ে দিব। চিন্তা নেই।
আচ্ছা, এবার কাজের কথায় আসি। আমরা আসলে শিখতে যাচ্ছি প্রোগ্রামিং ল্যাঙ্গুয়েজ কিভাবে ইমপ্লিমেন্ট করা হয় সেটা।
প্রোগ্রামিং ল্যাঙ্গুয়েজ ইমপ্লিমেন্টের দুইটা প্রধান উপায় হচ্ছেঃ
১। কম্পাইলার
২। ইন্টারপ্রেটার।
এই সিরিজটা মেইনলি কম্পাইলার নিয়েই হবে। তবে এর আগে খানিকটা ইন্টারপ্রেটার নিয়ে বলে নেই। বিরক্ত হয়েন না প্লিজ!
ইন্টারপ্রেটারঃ আচ্ছা, ইন্টারপ্রেটার আসলে কি করে? নিচের ছবিটা দেখুন আগে।
Fig: Basic Workflow of Interpreter মাঝের বক্সটা একটা ইন্টারপ্রেটার। এটা ইনপুট হিশেবে নেয় আমাদের প্রোগ্রামকে এবং ডাটাকে। তারপর ডিরেক্টলি আউটপুট জেনারেট করে। মানে, কোডটা এক্সিকিউট করার আগে কোন প্রসেসিং করে না।
অর্থ্যাৎ, আপনি কোড লিখলেন, ইন্টারপ্রেটারের উপর ডাটা দিলেন, সাথে সাথে কোড রান হওয়া শুরু করল।
কম্পাইলারঃ এবার আসি কম্পাইলারের আলাপে। কম্পাইলার ভিন্নভাবে কাজ করে। নিচের ছবিটা দেখুন আগে।
Basic Workflow of compiler Fig: Basic workflow of a compiler কম্পাইলার ইনপুট হিশেবে শুধু আপনার প্রোগ্রামটা নেয়। তারপর একটা এক্সিকিউটেবল ফাইল তৈরি করে। এই এক্সিকিউটেবলটা কিন্তু আরেকটা প্রোগ্রাম। এটা অ্যাসেম্বলি ল্যাঙ্গুয়েজ হতে পারে, বাইটকোড হতে পারে, বা অন্য কোন ল্যাঙ্গুয়েজও হতে পারে।
মজার বিষয় হচ্ছে, এই এক্সিকিউটেবল প্রোগ্রামটা আপনি এবার আলাদাভাবে রান করতে পারবেন। এর মধ্যে আপনি ডাটা দিয়ে রান করবেন, আর আউটপুট জেনারেট হবে। বোঝা গেল?
অর্থ্যাৎ, প্রথমে আমরা আমাদের প্রোগ্রামকে প্রি-প্রসেস করছি। কম্পাইলার আসলে একটা প্রি-প্রসেসিং স্টেপ, যেটা একটা এক্সিকিউটেবল তৈরী করে। তারপর সেই এক্সিকিউটেবল অসংখ্য ভিন্ন ভিন্ন ইনপুট, ভিন্ন ভিন্ন ডাটা সেটের উপর রান করতে পারবে। কিন্তু রান করার জন্য আমাদের আর কোন কম্পাইলিং বা প্রোগ্রাম প্রসেসিং দরকার হবে না।
গল্পঃ চলেন এবার কিছুক্ষণ গল্প বলি। কম্পাইলারের গল্প।
ঘটনার শুরু ৫০ এর দশকে। আইবিএমের তৈরি একটা মেশিন(704) দিয়ে শুরু হয় কাহিনী। এই 704 ছিল তাদের তৈরি প্রথম ব্যাবসায়িকভাবে সফল মেশিন। অবশ্য এর আগেও তারা আরও কিছু মেশিন বানানোর চেষ্টা করেছে।
অদ্ভুত ব্যাপার হচ্ছে, মানুষ যখন এই মেশিন কিনে ব্যাবহার করতে শুরু করল, তখন দেখা গেল, সফটওয়্যারের দাম হার্ডওয়্যারের থেকে বেশি! এবং অল্প বেশি না, অনেক অনেক বেশি!
এই ব্যাপারটা গুরুত্বপূর্ণ, কারণ যখনকার গল্প বলছি, সে সময়ে হার্ডওয়্যারের দাম ছিল ব্যাপক। এতো দাম আর কখনও হওয়া সম্ভব না। আবার সফটওয়্যার ছাড়া কম্পিউটারের উপযুক্ত ব্যাবহার সম্ভব না।
এই কারণে কিছু মানুষ ভাবতে শুরু করল কিভাবে আরেরকটু ভালোভাবে সফটওয়্যার বানানো যায়। প্রোগ্রামিংকে আরেকটু প্রোডাক্টিভ কিভাবে বানানো যায়।
জন বাকুস এবং FORTRAN এর জন্মঃ শুরুর দিকে, মানে ১৯৫৩ সালে জন বাকুস প্রোগ্রামিংকে আরেকটু প্রোডাক্টিভ করার জন্য SpeedCoding নিয়ে আসেন। এই স্পিডকোডিংই হলো আজকের সময়ের ইন্টারপ্রেটারের পূর্বপুরুষ!
এবং বাকি সব ইন্টারপ্রেটারের মতো এরও কিছু সুবিধা এবং অসুবিধা ছিল।
এর প্রধান সুবিধা ছিল, প্রোগ্রাম তৈরি করতে খুব কম সময় লাগত। তাই প্রোগ্রামাররা অনেক প্রোডাক্টিভ ভাবে কাজ করতে পারত।
অসুবিধা হলো, স্পিডকোডের প্রোগ্রামগুলো রান করার বেলায় দশ থেকে বিশ গুন স্লো ছিল! আজকের দিনের ইন্টারপ্রিটেড প্রোগ্রামের বেলাতেও সেটা সত্য।
অর্থ্যাৎ, আজকের দিনেও আপনার প্রোগ্রাম যদি ইন্টারপ্রেটার ব্যাবহার করে রান করে, সেটা কম্পাইলারের থেকে অনেক স্লো হবে।
আরেকটা বিষয় হলো, স্পিডকোডের ইন্টারপ্রেটার প্রায় ৩০০ বাইটের মতো মেমরি খেয়ে নিত। কি? খুব কম মনে হচ্ছে? আজকের দিনের হিশেবে আসলেই কম। তবে সেই যুগের সাথে মেলালে দেখবেন, এটা মেশিনের(704) টোটাল মেমরির প্রায় ৩০ শতাংশ! ভাবা যায়?
স্পিডকোডিং পপুলার হয়নি, তবে জন বাকুস ছিলেন নাছোড়বান্দা। তিনি আশা হারালেন না। নতুন প্রোজেক্টের আইডিয়া পেয়ে গেলেন এটা থেকে।
সেকালের সবচেয়ে গুরুত্বপূর্ণ অ্যাপ্লিকেশনগুলো ছিল সাইন্টিফিক ক্যালকুলেশনের জন্য। প্রোগ্রামাররা ফরমুলা লেখার কথা ভাবত, যাতে মেশিন দিয়ে সেটা চালানো যায়।
মিস্টার জন বাকুস ভাবলেন , স্পিডকোডিং এর আসল ঝামেলাটা হলো, এটা ফরমুলা গুলোকে ইন্টারপ্রেট করছে। তিনি ভাবলেন, এমন যদি হতো যে শুরুতে ফরমুলাগুলোকে অন্য একটা রূপে যদি অনুবাদ(Translate) করা যায় যেটা মেশিন বুঝতে পারবে এবং সরাসরি চালাতে পারবে। সেই কোডটা অবশ্যই অনেক ফাস্ট হবে। এবং একই সাথে প্রোগ্রামাররাও হাই লেভেল ল্যাঙ্গুয়েজে কোড লিখতে পারবে।
এভাবেই জন্ম নিল Formula Translation Project বা FORTRAN! FORTRAN চলল ১৯৫৪ থেকে ১৯৫৭ সাল পর্যন্ত। মজার বিষয় হচ্ছে, তারা ভেবেছিল, কম্পাইলার তৈরি করতে এক বছরের বেশি লাগবে না! কিন্তু আসলে সময় লেগে গেল তিন বছর! অর্থ্যাৎ দেখা যাচ্ছে, প্রোগ্রামাররা আসলে কখনই প্রোজেক্ট ডেডলাইন হিশাব করার ক্ষেত্রে দক্ষ ছিল না! 😝 তবে এই প্রোজেক্টটা ভীষণ সাকসেসফুল ছিল।
১৯৫৮ সালের মধ্যে সমস্ত কোডের ৫০ পার্সেন্টেরও বেশি কোড লেখা হয়ে গেল FORTRAN এ। আজকের দিনেও এমন হলে আমরা খুবই অবাক হতাম। সেই সময়ে সেটা মারাত্বক সফলতা ছিল।
FORTRAN অ্যাবস্টাকশনের লেভেল বাড়িয়ে দিল, প্রোগ্রামারের প্রোডাক্টিভিটি বাড়ালো, এবং সবাইকে সুযোগ করে দিল তৎকালীন মেশিন গুলোকে আরও ভালোভাবে ব্যাবহার করার।
FORTRAN I ছিল পৃথিবীর প্রথম সাকসেসফুল হাইল লেভেল ল্যাঙ্গুয়েজ। কম্পিউটার সায়েন্সে এর অবদান ব্যাপক। আরও নির্দিষ্ট করে বলতে গেলে, থিওরেটিকাল কাজে বিশাল অবদান রেখেছে এই ল্যাঙ্গুয়েজ। প্রোগ্রামিং ল্যাঙ্গুয়েজের মজার বিষয় হলো এটা থিওরি আর প্র্যাক্টিকালকে এক জায়গায় জুড়ে দিতে পারে। আসলে থিওরি আর ইঞ্জিনিয়ারিং স্কিলে ভালো না হলে প্রোগ্রামিং ল্যাঙ্গুয়েজ দিয়ে ভালো কিছু করা সম্ভব না।
ফরট্রানের অবদান কিন্তু শুধু কম্পিউটার সায়েন্সের রিসার্চেই ছিল এমনটা না। প্র্যাক্টিকাল কম্পাইলার তৈরির পেছনে এর অবদান অনেক। সতি বলতে এর অবদান এতোটাই গুরুত্বপূর্ণ ছিল যে আজকের দিনের কম্পাইলার তৈরির ক্ষেত্রেও FORTRAN I এর আউটলাইন অনুসরণ করা হয়।
আচ্ছা, তাহলে FORTRAN I এর স্ট্রাকচার কেমন ছিল?
এর মুলত পাঁচটা ফেজ ছিলঃ
১। Lexical Analysis
২। Parsing
৩। Semantic Analysis
৪। Optimization
৫। Code Generation
লেক্সিকাল অ্যানালাইসিস আর পারসিং প্রোগ্রামিং ল্যাঙ্গুয়েজের সিন্ট্যাক্টিক দিকগুলো সামলায়।
সিমান্টিক অ্যানালাইসিস ল্যাঙ্গুয়েজের টাইপ, স্কোপ এসব সামলায়।
অপটিমাইজেশন আসলে প্রোগ্রামকে বেশ কিছু ট্রান্সফরমেশনের মধ্যে দিয়ে নিয়ে যায়। যার মূল উদ্দেশ্য হলো, প্রোগ্রাম যাতে দ্রুত রান করতে পারে অথবা যাতে অনেক কম মেমরি ব্যাবহার করে।
সব শেষে আসে কোড জেনারেশন। এটা মুলত কোডকে অন্য একটা রূপ দেয়। বা অনুবাদ করে - বলতে পারেন। হতে পারে এটা মেশিন কোড তৈরি করছে। হতে পারে বাইট কোড। অথবা অন্য কোন হাই লেভেল ল্যাঙ্গুয়েজেও রূপান্তর করতে পারে।
যাহোক, আজকের মতো এটুকুই। সামনের আর্টিকেলগুলোতে এগুলো নিয়ে আরও অনেক বিস্তারিত জানব আমরা। (চলবে...)
রেফারেন্স কোর্সঃ Edx Course on Compiler