Wednesday, July 6, 2011

বোকা কম্পিউটারের চালাকি - ২ : কম্পিউটারের ভাষা

সংবিধিবদ্ধ সতর্কীকরণঃ এই লেখা কম্পিউটারবোদ্ধাদের জন্য নহে।

১ম পর্বে দেখিয়েছিলাম – কম্পিউটারকে কিভাবে ০(শূন্য) আর ১(এক) এর মাধ্যমে ইনস্ট্রাকশন দিতে হয়। বড় জটিল সে ইনস্ট্রাকশন, তাই না? এমনভাবে ইনস্ট্রাকশন দেয়া মোটেও আমাদের মতো সাধারণ মানুষের কম্মো নয়, কি বলেন? তবে শুরুটা কিন্তু ওভাবেই ছিল। একারণে তখন কিন্তু তা আমাদের নাগালের মধ্যেও ছিল না। ভাগ্য ভালো, এখন আর সেভাবে হাজার-হাজার-লাখ-লাখ ০ আর ১ লিখতে হয় না। এখন কীভাবে লিখা হয় সেদিকেই নজর দিব আজকে।

একটা অতীব সত্য কথা বলি। কম্পিউটার কিন্তু এখনো ০ আর ১ দিয়ে গঠিত ইনস্ট্রাকশন ছাড়া অন্য কিছু বুঝে না। এটাই তার ভাষা। আমরা বাঙালিরা যেমন বাংলা ছাড়া আর কোন ভাষা বুঝি না (ইংরেজি বা অন্য কোন ভাষাকে আসলে আগে বাংলায় অনুবাদ করে নেই, এরপর বুঝি), তেমনি কম্পিউটারও তার ভাষা ছাড়া অন্য কিছু বুঝে না। ভিন্নভাবে ইনস্ট্রাকশন দিলে সে আগে নিজের ভাষায় রূপান্তর করে নেয়। কম্পিউটারের এই ভাষার কেতাবি নাম হলো – মেশিন ল্যাংগুয়েজ [উইকি]।

কিন্তু, মেশিন ল্যাংগুয়েজে কথা বলা তো মেশিনের কাজ। বোরিং আর যান্ত্রিক। এইসব সংখ্যা দিয়ে কথা বলতে কি আমাদের ভাল লাগে? আমরা তো কথা বলি শব্দ দিয়ে, সংখ্যা দিয়ে না। আচ্ছা, এমন যদি হতো কোন একটা যন্ত্র আমাদের শব্দগুলোকে কম্পিউটারের সংখ্যায় কনভার্ট করে দিচ্ছে, তাহলে ভাল হতো না? এমন কনভার্টার কিন্তু আসলেই আছে। এর নাম কম্পাইলার [উইকি]

চলুন কম্পাইলারের কাজটা একটু দেখে নেই। গত পর্বের আমাদের সিম্পল কম্পিউটারের ইনস্ট্রাকশনগুলোর কথা মনে আছে? ১৫ আর ২০ এর যোগের ইনস্ট্রাকশন ছিল – ০০০১ ০০১৫ ০০২০ (বাইনারিতে কনভার্শনের আগে)। এখানে প্রথম ০০০১ হলো যোগের কার্যনম্বর (কেতাবি নামঃ অপ্‌কোড [উইকি]), আর পরবর্তী ০০১৫ আর ০০২০ হলো যোগের সংখ্যা দু’টি। এই ইনস্ট্রাকশনকে আমাদের পরিচিত ইংরেজি ভাষায় লিখতে বললে হয়তো লিখতাম –

ADD 15,20

তাই না? কম্পাইলার এই ইংরেজি ভাষার ইনস্ট্রাকশনকে নিচের নিয়মে মেশিন ল্যাংগুয়েজে অনুবাদ করতে পারে-

১) প্রথমে ADD কে যোগের কার্যনম্বরে (০০০১) কনভার্ট করবে।
২) এরপর কমার দুই পাশের সংখ্যা দু’টোকে ৪ অংকের সংখ্যায় রূপান্তর করবে (০০১৫, ০০২০)
৩) এরপর তিনটা সংখ্যা একসাথে করবে – ০০০১০০১৫০০২০। ব্যস! হয়ে গেলো।

আপনি-আমি ০০১০০০১৫০০২০ লেখার চেয়ে ADD 15,20 লিখতেই স্বচ্ছন্দ বোধ করবো, তাই না? এর মূল কারণ হলো – আমরা সংখ্যার চেয়ে শব্দ মনে রাখতে পারি সহজে। এইভাবে মেশিন ল্যাংগুয়েজের সংখ্যার জায়গায় কিছু পরিচিত শব্দ বসিয়ে আরেকটা ল্যাংগুয়েজ তৈরি করতে পারি, যেটাকে কম্পাইলার আবার মেশিন ল্যাংগুয়েজে অনুবাদ করতে পারে। এই নতুন ল্যাংগুয়েজটাকে বলে অ্যাসেম্বলি ল্যাংগুয়েজ [উইকি]। এটা মূল মেশিন ল্যাংগুয়েজের অনেক কাছাকাছি, তবে মানুষের জন্যও কিছুটা বোধগম্য।

বিভিন্ন স্তরের প্রোগ্রামিং ল্যাংগুয়েজ 
বিভিন্ন স্তরের প্রোগ্রামিং ল্যাংগুয়েজ। ছবি কৃতজ্ঞতাঃ http://www.webopedia.com/

যোগ, বিয়োগ, গুণ, ভাগ আর মনিটরে ফলাফল দেখানোর ইনস্ট্রাকশনগুলো অ্যাসেম্বলি ল্যাংগুয়েজে কেমন হতে পারে দেখি –

অপারেশন: মেশিন ল্যাংগুয়েজ ইনস্ট্রাকশন :অ্যাসেম্বলি ল্যাংগুয়েজ ইনস্ট্রাকশন
১৫+২০ :০০০১ ০০১৫ ০০২০ADD 15, 20
১০০-৩৩ :০০০২ ০১০০ ০০৩৩SUBTRACT 100, 33
৪৫x২৯ :০০০৩ ০০৪৫ ০০২৯MULTIPLY 45, 29
৬০÷৪০০০৪ ০০৬০ ০০০৪DIVIDE 60, 4
ফলাফল দেখানো :০০০৫ ০০০০ ০০০০PRINT

(উল্লেখ্যঃ এ লেখার ইনস্ট্রাকশনগুলো নমুনা মাত্র, হুবহু এভাবে মেশিন/অ্যাসেম্বলি ল্যাংগুয়েজ লেখা হয় না, তবে উদাহরণগুলো মূল ল্যাংগুয়েজের কাছাকাছি।)

এইবার এক বদলোকের কথা শুনি। সে যোগ-এর অনুবাদ ADD না করে করেছে SUM, বিয়োগের অনুবাদ করেছে DEDUCT। কমার বদলে লিখেছে AND। তার লেখা ইনস্ট্রাকশনগুলো এইরকম

SUM 15 AND 20
DEDUCT 100 AND 30

এখন কি হবে? আমাদের উপরের বানানো কম্পাইলার তো SUM/DEDUCT বুঝে না, এটা অনুবাদও করতে পারে না। আবার কমার দুই পাশের সংখ্যা দু’টো আলাদা করে, AND এর দু’পাশের না। আসলে, এখানে যার যা খুশি লিখতে পারবে না। প্রতিটা ল্যাংগুয়েজের কিছু নিয়ম-কানুন আছে, নিজস্ব শব্দভান্ডার আছে। সবাইকে এইসব নিয়ম-কানুন মেনে চলতে হবে। কম্পিউটারের ল্যাংগুয়েজের এইসব নিয়ম-কানুনই হলো তার সিন্‌ট্যাক্স [উইকি]। সিন্‌ট্যাক্স ঠিক রেখে ইনস্ট্রাকশন দিতে হবে। আমাদের স্বাভাবিক ভাষার ব্যাকরণের মতোই অনেকটা- কিছু অর্থহীন শব্দ একের পর এক বসিয়ে দিলেই হলো না, ব্যাকরণ মেনে বসাতে হবে।

সিন্‌ট্যাক্স ঠিক রেখে অ্যাসেম্বলি ল্যাংগুয়েজে কমান্ড দেয়া মেশিন ল্যাংগুয়েজের চেয়ে কিছুটা সহজতর হলেও, তা আমাদের স্বাভাবিক ল্যাংগুয়েজ থেকে অনেক দূরের ল্যাংগুয়েজ। এরকম ল্যাংগুয়েজকে বলে লো-লেভেল ল্যাংগুয়েজ [উইকি]। এই ল্যাংগুয়েজগুলো বিভিন্ন ধরনের কম্পিউটারের ক্ষেত্রে (যেমন- INTEL প্রসেসর, AMD প্রসেসর ইত্যাদি) বিভিন্ন রকম হতে পারে। আরেক ধরনের ল্যাংগুয়েজ আছে যেগুলো সব ধরনের কম্পিউটারের জন্যই একই রকম এবং আমাদের স্বাভাবিক ল্যাংগুয়েজের আরো কাছাকাছি। এগুলোকে বলে হাই-লেভেল ল্যাংগুয়েজ [উইকি]। প্রোগ্রামিং ল্যাংগুয়েজ [উইকি] বলতে মূলতঃ আমরা এই হাই-লেভেল ল্যাংগুয়েজকেই বুঝে থাকি। খুব পরিচিত আর জনপ্রিয় হাই-লেভেল ল্যাংগুয়েজের মধ্যে C, C++, Java, C#, Pascal, Fortran, HTML, JavaScript অন্যতম। আরো নাম জানার খায়েশ থাকলে এখানে দেখতে পারেন।

শেষ পর্যন্ত তাহলে কি দাঁড়ালো? আমরা হাই-লেভেল প্রোগ্রামিং ল্যাংগুয়েজ ব্যবহার করে যেসব প্রোগ্রাম লিখি কম্পাইলার তা অনুবাদ করে প্রথমে লো-লেভেল ল্যাংগুয়েজে, পরে মেশিন ল্যাংগুয়েজে রূপান্তর করে। কখনো কখনো সরাসরি মেশিন ল্যাংগুয়েজেও রূপান্তর করতে পারে, তবে শেষ পর্যন্ত মেশিন ল্যাংগুয়েজে আসে। আর কেবল তখনই কম্পিউটার তার কাজ করতে পারে। কারণ এটাই যে তার মাতৃভাষা!

ভিন্ন প্রসঙ্গঃ এখন গুগল ট্রান্সলেটর অনেক ভাষার অনুবাদ করতে পারে। এমনকি বাংলা ভাষার মতো জটিল ভাষাকেও অনুবাদ করা শুরু করেছে। ইস, যদি গুগল ট্রান্সলেটর আমাদের ন্যাচারাল ল্যাংগুয়েজকে (যেমনঃ ইংরেজি) কোন একটা প্রোগ্রামিং ল্যাংগুয়েজে (যেমনঃ সি) অনুবাদ করতে পারতো!

2 comments:

মিঠু said...

এটা ২০১১ দেখাচ্ছে কেন? অপ্রকাশিত ছিলো?

আলোর ছটা said...

নাহ্‌, পুরান তারিখ (যখন লেখাটা লিখছিলাম তখনকার তারিখ) দিয়ে পাবলিশ করছি।