কম্পিউটারের যতো দুর্বোধ্য ভাষা!

 

jimbo_lyon

যদি আমি এই মুহুর্তে বলি একটা প্রোগ্রামিং ভাষার নাম বলতে,আপনি নিশ্চই আগ্রহে উন্মুখ হয়ে 'C', 'C++', 'Java', 'Visual Basic' বা এধরনের কোন প্রোগ্রামিং ভাষার নাম বলবেন? আমি যদি তখন বলি 'না, হলো না। একেবারে বেড়াছেড়া ধরনের দুর্বোধ্য কোনো প্রোগ্রামিং ভাষার নাম বলতে হবে!' তখন?

 

 

 

 

 

 

 

 

 

চিত্র : ইন্টারকল'র অন্যতম রচয়িতা জেমস. এম. লাইঅন 


হ্যাঁ, আজ এই বিষয়টা নিয়েই আলোচনা করা যাক্‌। উপরে যেই প্রোগ্রামিং
ভাষাগুলোর নামোল্লেখ করা হয়েছে সেগুলো মূলত: খুবই পরিচিত এবং সহজবোধ্য
ভাষা!  কেননা সেগুলো প্রচলিত ইংরেজী ভাষায়ই তৈরী। তাই একজন শিক্ষার্থীর
পক্ষে এধরনের কোন ভাষায় পারদর্শী হতে খুব একটা বেগ পেতে হয়না। কিন্তু
প্রচলিত এই ভাষাগুলোর পাশাপাশি অপ্রচলিত কিছু ভাষা আছে যাদেরকে ইংরেজীতে
বলে 'Esoteric programming language'। এই খিটমিটে ইংরেজী শব্দগুলোর
সাদামাটা বাংলা অর্থ করলে দাঁড়াবে 'গুপ্ত বা ব্যক্তিগত প্রোগ্রামিং ভাষা'।
এখন প্রশ্ন হলো, এই ধরনের প্রোগ্রামিং ভাষার প্রয়োজনীয়তাটা কি? একভাবে
দেখলে বলতে হবে, আসলে এর কোন প্রয়োজনীয়তা নেই। এটা উর্বর মস্তিষ্কের কিছু
মানুষদের 'ফাজলামো'। কিন্তু, ব্যাপারটাকে এভাবেও বলা যায়, যে খুবই মেধাবী
কিছু মানব মস্তিষ্কের 'খাদ্য' হলো এই প্রোগ্রামিং ভাষা। কেননা এ ধরনের
প্রোগ্রামিং ভাষার বেশিরভাগ

বিভিন্ন ধরনের সাংকেতিক চিহ্ন ব্যবহার করে থাকে। এবং এই ভাষাগুলোর
গঠনতন্ত্রের একটি উল্লেখযোগ্য দিক হলো, এগুলো প্রচলিত প্রোগ্রামিং ভাষার
পরিচিত বৈশিষ্ট্যগুলোকে পরিহার করে থাকে। যদিও একটি প্রোগ্রামিং ভাষার মুল
কাজ, অর্থাৎ গননা করার কাজটি এটি বেশ ভালোই পারে। এতোক্ষণ সহজ সহজ কথা
বললাম এখন কঠিন কঠিন কথা বলা শুরু করবো!

 

কম্পিউটারের অন্যান্য ভাষাগুলোর মতোই কিন্তু এস্টোরিক্ ভাষাগুলোও Turing-complete. এর অর্থ হলো, এটি যে কোন ধরনের গণনা সংক্রান্ত কাজ, তা যতো জটিল-ই হোক, করতে সক্ষম। আরও সুনির্দিষ্টভাবে বললে বলতে হবে, এতে অসীম সংখ্যক ইনপুট দেয়া হলে, এটিও অসীম সংখ্যক আউটপুট দেবে; কিন্তু সেটা সে করবে নির্দিষ্ট সংখ্যক কিছু পদক্ষেপের পুনরাবৃত্তির মাধ্যমে! মুলত, বিখ্যাত বৃটিশ কম্পিউটার বিজ্ঞানী এ্যালান টিউরিঙ'র নামানুসারেই এর এরকম নামকরণ করা হয়েছে। এ্যালান টিউরিঙ-ই সর্ব প্রথম ব্যক্তি যিনি প্রস্তাব করেন যে, এমন একটি মেশিন বানানো সম্ভব যা অসীম সংখ্যক সামঞ্জস্যহীন ইনপুটকে গ্রহণ করে একটি অর্থপুর্ণ আউনপুট দেবে।

 

যাহোক, এস্টোরিক ভাষায় ফিরে আসি। একেবারে প্রথমদিককার এস্টোরিক ভাষাগুলোর নাম বললে, প্রথমেই আসবে INTERCAL'র কথা। ১৯৭২ সালে খ্যাতনামা প্রিন্সটন বিশ্ববিদ্যালয়ের দুজন ছাত্র জেমস. এম. লাইঅন এবং ডন উডস্ , স্রেফ মজা করার জন্যই তৈরী করেছিলেন এই প্রোগ্রামিং ভাষা। তখনকার INTERCAL'র ম্যানুয়ালই তার প্রমান। সেখানে একটি সাবধান বাণী আছে এরকম, 'সাবধান! শুধুমাত্র বিভ্রান্তিকর অবস্থা ছাড়া, আর কোন অবস্থাতেই 'মেশ'(পরিভাষা) এবং 'ইন্টারলিভ' (পরিভাষা) নিয়ে বিভ্রান্ত হওয়া যাবে না!'  এই হলো ইন্টারকল।

 

jimbo_lyon

চিত্র : ইন্টারকল'র অন্যতম রচয়িতা জেমস. এম. লাইঅন  

 

এবারে ইন্টারকল প্রোগ্রামিং ভাষার কিছু জলজ্যান্ত উদাহরণ দেয়া যাক্‌। আমরা যদি C ভাষায় 'Hello World!' কথাটি লেখতে চাই তাহলে লেখাটি দাঁড়াবে এরকম:


#include <stdio.h>


int main(void)
{
    printf("Hello, world!n");

    return 0;
}


এই লেখাটিই যদি আমরা ইন্টারকলে লিখি তাহলে লিখতে হবে:


DO ,1 <- #13
PLEASE DO ,1 SUB #1 <- #234
DO ,1 SUB #2 <- #112
DO ,1 SUB #3 <- #112
DO ,1 SUB #4 <- #0
DO ,1 SUB #5 <- #64
DO ,1 SUB #6 <- #194
DO ,1 SUB #7 <- #48
PLEASE DO ,1 SUB #8 <- #22
DO ,1 SUB #9 <- #248
DO ,1 SUB #10 <- #168
DO ,1 SUB #11 <- #24
DO ,1 SUB #12 <- #16
DO ,1 SUB #13 <- #214
PLEASE READ OUT ,1
PLEASE GIVE UP


জটিল অবস্থা, তাই না! ব্যাপারটাকে আরও একটু জটিল করা যাক্। বর্তমান কালের এ্যাস্টোরিক ভাষার মধ্যে সবচেয়ে জনপ্রিয় হলো 'ব্রেইনফাক'। এটি ইন্টারকলের প্রায় বিশ বছর পর তৈরী হয়েছে। এবং শুধুমাত্র আটটি সংকেতিক চিহ্ন ব্যবহার করা হয়েছে এই ভাষায়। উপরে লেখাটিই যদি আমরা ব্রেইনফাক দিয়ে লিখতে যাই, তাহলে অবস্থা কেরোসিন হয়ে যাবে। নীচে তার নমুনা দেয়া হলো:

 


++++++++++[>+++++++>++++++++++>+++>+<<<<-]>++.>+.+++++++.

.+++.>++.<<+++++++++++++++.>.+++.——.——–.>+.>.


কি কান্না পাচ্ছে? ভেবেছিলাম এ্যাস্টোরিক ভাষার বিভিন্ন ধরন যেমন Turing tarpit, Funges এগুলো নিয়েও লিখবো। কিন্তু মাথা নষ্ট করতে কে চায় বলুন! আজ তাহলে এখানেই থাক্। ভালো থাকুন। জটিল থাকুন। আর কখনও যদি মনে হয় জীবনটা রসকষহীন, তবে সঙ্গে সঙ্গে যেকোন একটি এস্টোরিক ভাষা শেখা শুরু করে দিন। দেখবেন, জীবনটা কতো সুন্দর!

সবার জন্য শুভ কামনা।

 

ছবি ও তথ্যসূত্র:

  1. Wikipedia 

ফেসবুক কমেন্ট


4 Comments

  1. ১৯৯৫ সনের দিকে অনার্স করার সময় কিছু রোবট নিয়ে কাজ করছিলাম। সেই সময় মেশিন ল্যাঙ্গুয়েজে কাজ করতে হত। আর সমস্যা হত আজকের মত মেমরি তেমন বেশী ছিলনা। তাই প্রতিটি লাইনই খুব যত্ন নিয়ে করতে হত। রোবটটির মধ্যে কিছু Fuzzy Logic (রোবটকে ফাজলামি করতে শেখান আর কি) ঠুকাতে হচ্ছিল তখন সত্যিই বেগ পেতে হচ্ছিল। এত দূর্বোধ্য ও জটিল কাজ খুব কমই করেছি। আমার মনে হয় প্রথম লেভেলের মেশিন ল্যাঙ্গুয়েজই সবথেকে দূর্বোধ্য ও জটিল।

    আমার ধারণা অদূর ভবিষ্যতে আমাদের প্রোগ্রামই লিখতে হবেনা। কম্পিউটারকেই বলব তুমি এই প্রোগ্রামটি করে ফেল, বলব “আমি এটি করাতে চাই”, তেমনি কম্পিউটার নিজেই সেই প্রোগ্রামটি লিখে ফেলবে। সেইদিন আসতে দেরী নেই।

  2. The Brainfuck programming language consists of eight commands, each of which is represented as a single character.

    > Increment the pointer.
    < Decrement the pointer. Increment the byte at the pointer. - Decrement the byte at the pointer. . Output the byte at the pointer. , Input a byte and store it in the byte at the pointer. [ Jump forward past the matching ] if the byte at the pointer is zero. ] Jump backward to the matching [ unless the byte at the pointer is zero. The semantics of the Brainfuck commands can also be succinctly expressed in terms of C, as follows (assuming that p has been previously defined as a char*): > becomes p;
    < becomes --p; becomes *p; - becomes --*p; . becomes putchar(*p); , becomes *p = getchar(); [ becomes while (*p) { ] becomes } http://www.muppetlabs.com/~breadbox/bf/

মন্তব্য করুন

আপনার ই-মেইল এ্যাড্রেস প্রকাশিত হবে না। * চিহ্নিত বিষয়গুলো আবশ্যক।

You may use

আপনি চাইলে এই এইচটিএমএল ট্যাগগুলোও ব্যবহার করতে পারেন: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

*