জাভা তে কম্পাইল ও ইন্টারপ্রেট উভয় করার কেন দরকার? আবার জাস্ট ইন টাইম কম্পাইলার বলতে কি বুঝায়???
টিউন-৫ঃ এ পর্বে আমি জাভার আরো দুইটা Basic গুরুত্বপূর্ণ Part তুলে ধরবো আর এই part দুটার প্রথম টা হল জাভাতে কম্পাইল ও ইন্টারপ্রেট উভয় করার দরকার পরে কেন আর অন্য part টি হল জাভার জাস্ট ইন টাইম কম্পাইলার বলতে কি বুঝায় ।
আপনারা যারা আমার দুই নাম্বার টিউন টা পড়েছেন তারা অবশ্যই সেখানে একটি রাজার গল্প লক্ষ্য করেছেন ( যদি না পড়ে থাকেন দুই নাম্বার টিউন টা একবার পড়ে আসুন ) সেই গল্পে রাজার ঘোষনা অনুযারী রাজকন্যা পাবার আসায় মনীষীর ইন্দ্রজালের জন্যে মন্ত্র( Java ) আবিষ্কার করেছিলেন জেমস গসলিং।
আজকে আমরা জেমস গসলিং এর তৈরি সেই মন্ত্রের(Java ) বিশেষত্ব টা সম্পর্কে জানবো.........
বিশেষত্ব জানার আগে চলুন জেনে নেই যে কম্পাইলার, ইন্টারপ্রেট এবং জাভার জাস্ট ইন টাইম কম্পাইলার আসলে কি ....................................
কম্পাইলার ঃ মনে করুন আপনি জাপানের এক লোকের সাথে কথা বলতে চান, কিন্তু আপনি জাপানি ভাষা বুঝতে পারেন না, আবার ঐ লোকটিও বাংলা বুঝতে পারে না। আপনারা দুজনেই আবার ইংরেজি জানেন না। তাহলে আপনি কিভাবে তার সাথে কথা বলবেন? এমতাবস্তায় আপনাদের দুজনের মাঝে Communication করার জন্যে তৃতীয় একজন লোকের দরকার যে জাপানি এবং বাংলা উভয় ভাষাই বুঝে। যাতে সে আপনাদের হয়ে আপনার বাংলা ভাষাকে তার কাছে জাপানি ভাষায় ব্যাখ্যা করে বুঝিয়ে দিতে পারে আবার তার জাপানি ভাষা আপনাকে বাংলায় ব্যাখ্যা করে বুঝিয়ে দিতে পারে । আর এই তৃতীয় ব্যক্তিকেই প্রোগ্রামিং এর ক্ষেত্রে বলা হয়ে থাকে কম্পাইলার।
প্রোগ্রামিং এর ভাষায়, কম্পাইলার এক ধরনের কম্পিউটার প্রোগ্রাম বা প্রোগ্রাম সমষ্টি যা কোন কম্পিউটার ভাষা(উৎস ভাষা) থেকে অপর একটি কম্পিউটার ভাষায় (গন্তব্য ভাষা) টেক্সট অনুবাদ করে । মানে প্রোগ্রামের সোর্সকোড থেকে মেশিন কোডে রূপান্তর করে কম্পাইলার।
ইন্টারপ্রেটারঃ এটিও এক ধরনের অনুবাদক । এর কাজ হল সোর্স-কোড থেকে একটি করে ইন্সট্রাকশন নিয়ে তাকে মেশিন কোডে নিয়ে যাওয়া এবং সেই অনুযারী কাজ করা।
এখন অনেকের মনেই একটি প্রশ্ন ঘুরপাক খাইতেছে যে, দুটোই তো সোর্স-কোড থেকে Execute করে মেশিন কোডে রূপান্তর করছে তাহলে এদের মূল পার্থক্য টা আসলে কোথায়......?
আপনাদের প্রশ্নের ঘুরপাক দূর করতে তুলে ধরছি যে, আমরা সোর্স-কোডে যে প্রোগ্রাম লিখি সেই প্রোগ্রামের কোডে যদি কোথাও ভুল থাকে কম্পাইলার তারপরও পুরো প্রোগ্রাম Run করে, কিন্তু ইন্টারপ্রেটার সোর্স-কোডের কোথাও ভুল পেলেই সাথে সাথে প্রোগ্রাম Execution বন্ধ করে দেয়।
জাস্ট ইন টাইম কম্পাইলার ঃ এটি মূলত JVM এর একটি অংশ যা বাইট কোডকে প্রসেসিং করে থাকে। এটা Runtime এ অর্থ্যাত প্রসেস চলাকালীন সময়ে বাইটকোড কে ইন্টারপ্রিট করে মেশিন কোডে রূপান্তরিত করে। তাই এটাকে ডাইনামিক ট্রান্সলেটরও বলা হয়।
এখন চলুন আমরা জেমস গসলিং এর মন্ত্রের(Java) বিশেষত্ব জানতে মূল বিষয়ে ফিরে আসি............
আমরা জানি যে, প্রোগ্রামিং ল্যাঙ্গুয়েজ গুলা হয় তো কম্পাইলড না হয় ইন্টারপ্রেটেড হয় । তাহলে জাভা কমনে একেই সাথে কম্পাইলড এবং ইন্টারপ্রেটেড হয়! কম্পাইলড করলে আবার ইন্টারপ্রেটেড করার দরকার টা কি ??????????
হ্যাঁ ! জাভার মূল জাদু বা বিশেষত্ব আসলে এখানেই......। অন্যান্য ল্যাঙ্গুয়েজ এর প্রোগ্রাম কম্পাইল করার পর তা সেই মেশিন স্পেসেফিক বাইনারি মেশিন ল্যাঙ্গুয়েজ এ ট্রান্সলেট হয়ে যায়। ফলে সেটা সেই মেশিনে Direct Execute হতে পারে। কিন্তু নির্দিষ্ট মেশিন বা অপারেটিং সিস্টেমের জন্য হওয়ায়, অন্য মেশিন বা অপারেটিং সিস্টমে সেটাকে আর Execute করা যায় না। সেখানে Run করতে গেলে সেই মেশিনের কম্পাইলার দিয়ে আবার কম্পাইল করা লাগে।অন্য মেশিনে থাকা কম্পাইলার তখন সেই মেশিনের উপযোগী বাইনারি মেশিন ইন্সট্রাকশনে লিখে ফেলে, ফলে একই প্রোগ্রাম সেই ভিন্ন মেশিনও Run করে।
অন্যদিকে জাভার প্রোগ্রামগুলো কম্পাইল করার পর সেগুলো আসলে স্পেসেফিক কোন মেশিন ইন্সট্রাকশন হয়ে যায় না, বরং বাইটকোড নামে একটা জগাখিচুড়ি অবস্থায় রূপান্তর হয়। এই বাইটকোড তাই Direct মেশিনে Run করা যায় না ।Run করার জন্য Java Virtual Machine(JVM) নামক এক কাল্পনিক মেশিনের সাহায্য নেয়া হয়, যেটার ভিতরে আসলে থাকে ইন্টারপ্রেটার।
এই JVM ইন্টারপ্রেটার পরে লাইন বাই লাইন বাইটকোড পড়ে মেশিন কোডে ট্রান্সলেট করে এবং সাথে সাথে Run বা Execute করে। তাই এতে একই সাথে কম্পাইলার এবং ইন্টারপ্রেটারের প্রয়োজন হয়।
এখন আবার প্রশ্ন তৈরি হয়ে যায়- এত জটিলতার প্রয়োজন কি? বাইটকোড বানানোর দরকার কি?? একবারে মেশিনকোড বানায় ফেললেই তো হয়.........
আসলে বাইটকোড সব মেশিনের জন্য একই রকম। যে মেশিনের কম্পাইলারে কম্পাইল করা হোক না কেন, বাইটকোডে কোন Difference হবে না। ফলে এক মেশিনে কম্পাইল করা বাইটকোড সহজেই আরেক মেশিনের JVM ব্যবহার করতে পারে। ভিন্ন মেশিনে নতুন করে আর কম্পাইল করা লাগে না। ( শুধু কম্পাইলড প্রোগ্রামিং ল্যাঙ্গুয়েজ গুলাতে যেটা করা লাগে) । এ জন্যেই জাভা প্রোগ্রাম একবার কম্পাইল করে নিলেই সেটা যেকোন মেশিনে Run করা যায়।
এখন আবার অনেকেই জিজ্ঞাস করে বসে যে, JVM এ ইন্টারপ্রেটেড হয় ভাল কথা, কিন্তু জাস্ট ইন টাইম কম্পাইলার নামক বস্তুটাও তো থাকে, ব্যাপার টা কি!! ইন্টারপ্রেটারে আবার কম্পাইলার লাগবে কেন!!!
ইন্টারপ্রেটার আসলে লাইন বাই লাইন পড়ে, বাইনারিতে ট্রান্সলেশন করে এবং Execute করে। অন্যদিকে কম্পাইলার লাইন বাই লাইন পড়ে, ট্রান্সলেট করে এবং জমা করে রাখে। পুরো প্রোগ্রাম পড়া এবং ট্রান্সলেট হয়ে গেলে কম্পাইলার তখন পুরো বাইনারি কোড একসাথে Execute করে। এটাই হল মূল ব্যাপার। তো JVM এর ইন্টারপ্রেটার যখন লাইন বাই লাইন প্রোগ্রাম পড়ে তখন দেখা যায় বেশির ভাগ লাইনই রিপিট হয়। এখানে বার বার একই জিনিস ট্রান্সলেট করতে সময়ের ব্যয় কমানোর জন্যই মূলত জাস্ট ইন টাইম কম্পাইলারের আগমন। জাস্ট ইন টাইম যা করে সেটা হল- বার বার Execute হবে এমন লাইন গুলো চিহ্নিত করে একবারেই সেটার মেশিন কোড ট্রান্সলেট করে জমা করে রাখে। পরে যখন লাইন গুলো রিপিট হয় তখন সেগুলোকে আবার ট্রান্সলেট না করে জমা করা মেশিন কোড Direct করে দেয়। ফলে দেখা যায় প্রোগ্রাম আগের থেকে অনেক First রান হয়। জাস্ট ইন টাইম কম্পাইলার কে বলা যেতে পারে ইন্টারপ্রেটারের একটা আধুনিক রূপ, সব ইন্টারপ্রেটেড ল্যাঙ্গুয়েজ 'ই আজকাল জাস্ট ইন টাইম কস্পাইলার থাকে।
লেখার ভুল ক্ষমা দৃষ্টিতে দেখবেন আর জাভার পরবর্তী টিউন গুলো পেতে সাথেই থাকুন........................
/image%2F2599357%2F20171129%2Fob_ea748f_s3.jpg)