গত পর্বে আমরা খুবই সাধারণ Hello World প্রোগ্রামটি দেখেছি। print() ফাংশনের ভিতর কিছু একটা লিখে দিলেই সেটা আউটপুট হিসেবে দেখাচ্ছে। কিন্তু এটা কিভাবে কাজ করছে সেটা এই পর্বে বিস্তারিত আলোচনা করব।
কোন একটা প্রোগ্রাম “Run” করা থেকে আউটপুট প্রদর্শন পর্যন্ত এই অন্তর্বর্তীকালীন সময়ে বেশ কিছু ধাপ আছে যা সাধারণত আমরা চোখে দেখি না, এই অন্তর্বর্তীকালীন ধাপগুলোকে দুইটি ভাগে ভাগ করা যায় –
- বাইট কোডে (Byte Code) রুপান্তর এবং অন্যটি
- পাইথন ভার্চুয়াল মেশিন বা Python Virtual Machine বা সংক্ষেপে PVM
বাইট কোডে রুপান্তর (Byte Code)
পাইথন প্রথমে সোর্স কোডকে (Source code) বাইট কোডে রুপান্তর করে। এককথায় বলতে গেলে এটা একটা মাধ্যম যেটা লিখিত প্রোগ্রামকে মেশিনের উপযুক্ত ভাষায় রুপান্তর করে। বাইট কোড মেশিনের উপর নির্ভর করেনা, সম্পূর্ণ স্বতন্ত্র্য একটি মাধ্যম যেটা সোর্স কোডের চেয়ে অনেক দ্রুত কার্যসম্পাদন করতে পারে।
আমরা চাইলেই আমাদের কম্পিউটার বা মেশিনে বাইটকোডটি দেখতে পারি। যে ডিরেক্টরিতে আমাদের সোর্স ফাইলটা আছে, সেই ডিরেক্টরিতে _pycache_ নামক ফোল্ডারে বাইট কোডটি তৈরি হয়। তবে এটি .py না হয়ে .pyc এক্সটেনশনে save হয়। pyc অর্থ python compiled. তবে এটির নামকরনের একটি পদ্ধতি আছে।
ধরা যাক আপনি একটি প্রোগ্রাম লিখে সেটা test.py নামে save করেছেন। তাহলে এটার বাইটকোড টা এমন হতে পারে – test.cpython-38.pyc অর্থাৎ এই পাইথন ইন্টারপ্রেটারটি cpython এবং সংস্করণ (version) 3.8
একবার বাইট কোডে কম্পাইলড (compiled) হয়ে গেলে সেটা বাইট কোড থেকেই রান হয় যতক্ষণ না পর্যন্ত সোর্স কোডে কোন পরিবর্তন আনা হয়।
পাইথন ভার্চুয়াল মেশিন (Python Virtual Machine)
পাইথন ভার্চুয়াল মেশিন হচ্ছে পাইথনের রানটাইম ইঞ্জিন (Run time Engine) এবং সর্বশেষ ধাপ। এটিই মূলত প্রোগ্রামটাকে ইনস্ট্রাকশনে (Instruction) রুপান্তরিত করে।