বি (প্রোগ্রামিং ভাষা)

**বি** হলো একটি প্রোগ্রামিং ভাষা, যা ১৯৬৯ সালের দিকে বেল ল্যাবসে কেন থম্পসন এবং ডেনিস রিচি তৈরি করেছিলেন।

বি মূলত রিকার্সিভ (পুনরাবৃত্তিমূলক), অ-সংখ্যাবাচক এবং মেশিন-নিরপেক্ষ অ্যাপ্লিকেশনের জন্য ডিজাইন করা হয়েছিল, যেমন সিস্টেম এবং ল্যাঙ্গুয়েজ সফটওয়্যার। এটি ছিল একটি টাইপলেস বা টাইপবিহীন ভাষা, যেখানে একমাত্র ডেটা টাইপ ছিল মেশিনের স্বাভাবিক মেমরি ওয়ার্ড বিন্যাস, তা যাই হোক না কেন। প্রেক্ষাপটের ওপর ভিত্তি করে, ওয়ার্ডটিকে হয় একটি পূর্ণসংখ্যা (integer) অথবা একটি মেমরি অ্যাড্রেস হিসেবে বিবেচনা করা হতো।

যখন আসকি প্রসেসিং ক্ষমতাসম্পন্ন মেশিনগুলো, বিশেষ করে বেল ল্যাবসে আসা ডিইসি পিডিপি-১১, সাধারণ হয়ে উঠতে শুরু করে, তখন মেমরি ওয়ার্ডে ক্যারেক্টার বা অক্ষর ডেটা রাখার বিষয়টি গুরুত্বপূর্ণ হয়ে ওঠে। ভাষাটির টাইপবিহীন প্রকৃতিকে তখন একটি অসুবিধা হিসেবে দেখা হয়। এর ফলে থম্পসন এবং রিচি ভাষাটির একটি সম্প্রসারিত সংস্করণ তৈরি করেন যা নতুন অভ্যন্তরীণ এবং ব্যবহারকারী-সংজ্ঞায়িত টাইপ সমর্থন করে, এবং এটিই পরবর্তীতে সর্বজনবিদিত সি প্রোগ্রামিং ভাষায় পরিণত হয়।

## ইতিহাস

কেন থম্পসন মূলত পিডিপি-৭-এর জন্য একটি ফোরট্রান কম্পাইলার হিসেবে বি-এর বিকাশ শুরু করেছিলেন, কিন্তু তিনি দেখতে পান যে তাঁর প্রাথমিক বাস্তবায়নটি উপলব্ধ মেমরি বা স্মৃতিশক্তির চেয়ে অনেক বেশি জায়গা নিচ্ছে। কম্পাইলারটিকে সহজ করা এবং বিসিপিএল দ্বারা প্রভাবিত হয়ে নিজের পছন্দ অনুযায়ী ভাষাটিকে সাজানোর বেশ কয়েকটি ধাপ পার করে, তিনি এমন একটি ভাষায় উপনীত হন যা একটি স্বতন্ত্র সিনট্যাক্স বা গঠনরীতিতে বিসিপিএল-এর শব্দার্থ প্রকাশ করত। থম্পসন ভাষাটির নাম দেন 'বি' (B)। এই নামকরণের ব্যাখ্যা হিসেবে বলা হয় এটি বিসিপিএল-এর সংক্ষিপ্ত রূপ অথবা বন (Bon) নামক তাঁর তৈরি অন্য একটি ভাষার নাম থেকে এসেছে, যদিও তিনি কোনো ব্যাখ্যাই নিশ্চিত করেননি।

থম্পসন `x =+ y` সিনট্যাক্স ব্যবহার করে "দুই-ঠিকানা অ্যাসাইনমেন্ট অপারেটর" যোগ করেন, যার অর্থ x-এর সাথে y যোগ করা (সিতে এই অপারেটরটি `+=` হিসেবে লেখা হয়)। এই সিনট্যাক্সটি ডগলাস ম্যাকইলরয়ের টিএমজি বাস্তবায়ন থেকে এসেছিল, যেটিতে বি-এর কম্পাইলারটি প্রথম তৈরি করা হয়েছিল (এবং টিএমজিতে এটি এসেছিল অ্যালগল ৬৮-এর `x +:= y` সিনট্যাক্স থেকে)। থম্পসন আরও এগিয়ে ইনক্রিমেন্ট এবং ডিক্রিমেন্ট অপারেটর (`++` এবং `--`) উদ্ভাবন করেন। এদের প্রিফিক্স বা পোস্টফিক্স অবস্থান নির্ধারণ করে যে অপারেন্ড পরিবর্তনের আগে নাকি পরে মানটি নেওয়া হবে। এই উদ্ভাবনটি বি-এর একদম শুরুর দিকের সংস্করণগুলোতে ছিল না। ডেনিস রিচির মতে, লোকেরা প্রায়শই ধারণা করে যে এগুলো ডিইসি পিডিপি-১১ এর অটো-ইনক্রিমেন্ট এবং অটো-ডিক্রিমেন্ট অ্যাড্রেস মোডের জন্য তৈরি করা হয়েছিল, কিন্তু ঐতিহাসিকভাবে এটি অসম্ভব কারণ বি যখন প্রথম তৈরি করা হয়েছিল তখন পিডিপি-১১ মেশিনের অস্তিত্বই ছিল না।

বি একটি টাইপলেস ভাষা, বা আরও সঠিকভাবে বলতে গেলে এর একটিই ডেটা টাইপ রয়েছে: কম্পিউটার ওয়ার্ড। বেশিরভাগ অপারেটর (যেমন `+`, `-`, `*`, `/`) এটিকে একটি পূর্ণসংখ্যা হিসেবে বিবেচনা করত, কিন্তু অন্য অপারেটররা এটিকে একটি মেমরি অ্যাড্রেস হিসেবে বিবেচনা করত যা ডিরেফারেন্স করা হবে। অন্যান্য অনেক দিক থেকে এটি সি-এর একটি প্রাথমিক সংস্করণের মতো ছিল। এতে একটি সাধারণীকৃত ফর লুপ অন্তর্ভুক্ত ছিল যা পরবর্তীতে সি-তে দেখা যায়, যা থম্পসন স্টিফেন জনসনের আগের কাজ থেকে গ্রহণ করেছিলেন। এতে কয়েকটি লাইব্রেরি ফাংশন রয়েছে, যার মধ্যে কিছু ফাংশন সি-এর স্ট্যান্ডার্ড আই/ও লাইব্রেরির ফাংশনগুলোর সাথে আবছাভাবে সাদৃশ্যপূর্ণ।
থম্পসনের কথায়: "বি এবং পুরনো আমলের সি [সি-তে থাকা] সমস্ত টাইপগুলো ছাড়া খুব খুব একই রকমের ভাষা ছিল"।

প্রাথমিক বাস্তবায়নগুলো ছিল ডিইসি পিডিপি-৭ এবং পিডিপি-১১ মিনিকম্পিউটারগুলোর জন্য যা প্রারম্ভিক ইউনিক্স ব্যবহার করত, এবং হানিওয়েল ৩৬-বিট মেইনফ্রেমের জন্য যা জিকস অপারেটিং সিস্টেম চালাত। প্রাচীনতম পিডিপি-৭ বাস্তবায়নগুলো থ্রেডেড কোডে কম্পাইল হতো, এবং রিচি টিএমজি ব্যবহার করে একটি কম্পাইলার লিখেছিলেন যা মেশিন কোড তৈরি করত। ১৯৭০ সালে একটি পিডিপি-১১ আনা হয় এবং পোর্টের জন্য থ্রেডেড কোড ব্যবহার করা হয়; কম্পিউটারকে বুটস্ট্র্যাপ করার জন্য একটি অ্যাসেম্বলার, , এবং বি ভাষাটি নিজেই বি-তে লেখা হয়েছিল। ইয়াক (yacc)-এর একটি প্রাথমিক সংস্করণ এই পিডিপি-১১ কনফিগারেশন দিয়ে তৈরি করা হয়েছিল। এই সময়ে রিচি রক্ষণাবেক্ষণের দায়িত্ব গ্রহণ করেন।

বি-এর টাইপলেস প্রকৃতি হানিওয়েল, পিডিপি-৭ এবং অনেক পুরনো কম্পিউটারে যুক্তিসঙ্গত ছিল, কিন্তু পিডিপি-১১-তে এটি একটি সমস্যা হয়ে দাঁড়ায় কারণ পিডিপি-১১ এবং অধিকাংশ আধুনিক কম্পিউটার যে ক্যারেক্টার ডেটা টাইপ সম্পূর্ণ সমর্থন করে, তা বি-তে মার্জিতভাবে অ্যাক্সেস করা কঠিন ছিল। ১৯৭১ সাল থেকে রিচি ভাষাটিতে পরিবর্তন আনা শুরু করেন এবং এর কম্পাইলারকে মেশিন কোড তৈরির উপযোগী করেন, যার মধ্যে সবচেয়ে উল্লেখযোগ্য ছিল ভেরিয়েবলের জন্য ডেটা টাইপ যোগ করা। ১৯৭১ এবং ১৯৭২ সালে বি বিবর্তিত হয়ে "নিউ বি" (New B বা NB) এবং পরবর্তীতে সি-তে রূপান্তরিত হয়।

বি প্রায় বিলুপ্ত হয়ে গেছে, কারণ সি ভাষা একে প্রতিস্থাপন করেছে। তবে, এটি এখনও জিকস মেইনফ্রেম (২০১৪ অনুযায়ী) 
এবং নির্দিষ্ট কিছু এমবেডেড সিস্টেমে (২০০০ অনুযায়ী) বিভিন্ন কারণে ব্যবহৃত হয়: ছোট সিস্টেমে সীমিত হার্ডওয়্যার, বিস্তৃত লাইব্রেরি, টুলিং, লাইসেন্সিং খরচের সমস্যা এবং সাধারণ কাজের জন্য যথেষ্ট ভালো হওয়ার কারণে। অত্যন্ত প্রভাবশালী AberMUD মূলত বি ভাষায় লেখা হয়েছিল।

## উদাহরণ
নিচের উদাহরণগুলো কেন থম্পসনের *ইউজার্স রেফারেন্স টু বি* থেকে নেওয়া হয়েছে:


```c
/* নিচের ফাংশনটি একটি অ-ঋণাত্মক সংখ্যা n-কে b ভিত্তিতে প্রিন্ট করবে,
   যেখানে 2<=b<=10। এই রুটিনটি এই সত্যটি ব্যবহার করে যে
   ASCII ক্যারেক্টার সেটে, ০ থেকে ৯ পর্যন্ত সংখ্যাগুলোর 
   ধারাবাহিক কোড মান রয়েছে। */

printn(n,b) {
   extrn putchar;
   auto a;
   /* উইকিপিডিয়া নোট: auto কীওয়ার্ডটি স্বয়ংক্রিয় স্টোরেজ (লাইফটাইম হলো ফাংশন স্কোপ) 
      ঘোষণা করে, C++11 এর মতো "স্বয়ংক্রিয় টাইপিং" নয়। */

   if(a=n/b) /* অ্যাসাইনমেন্ট, সমতার জন্য পরীক্ষা নয় */
      printn(a, b); /* রিকার্সিভ বা পুনরাবৃত্তিমূলক */
   putchar(n%b + '0');
}
```



```c
/* নিচের প্রোগ্রামটি ধ্রুবক e-2 এর মান প্রায় ৪০০০ দশমিক ঘর পর্যন্ত 
   গণনা করবে এবং প্রতি লাইনে ৫০টি ক্যারেক্টার এবং ৫টি ক্যারেক্টারের 
   গ্রুপে প্রিন্ট করবে। পদ্ধতিটি হলো নিম্নলিখিত ধারার সাধারণ আউটপুট রূপান্তর:
      1/2! + 1/3! + ... = .111...
   যেখানে সংখ্যাগুলোর ভিত্তি হলো ২, ৩, ৪, ... */

main() {
   extrn putchar, n, v;
   auto i, c, col, a;

   i = col = 0;
   while(i<n)
      v[i++] = 1;

   while(col<2*n) {
      a = n+1;
      c = i = 0;
      while(i<n) {
         c =+ v[i]*10;
         v[i++] = c%a;
         c =/ a--;
      }
      putchar(c+'0');
      if(!(++col%5))
         putchar(col%50?' ':'*n');
   }
   putchar('*n*n');
}

v[2000];
n 2000;
```


## তথ্যসূত্র

## বহিঃসংযোগ
* ইউনিক্স প্রথম সংস্করণ থেকে b(1)-এর ম্যানুয়াল পেজ
* দ্য ডেভেলপমেন্ট অফ দ্য সি ল্যাঙ্গুয়েজ, ডেনিস রিচি। এখানে বিসিপিএল এবং সি-এর প্রেক্ষাপটে বি-কে ব্যাখ্যা করা হয়েছে।
* *[https://web.archive.org/web/20240425202455/https://www.bell-labs.com/usr/dmr/www/kbman.html ইউজার্স রেফারেন্স টু বি]*, কেন থম্পসন। এটি পিডিপি-১১ সংস্করণ বর্ণনা করে।
* দ্য প্রোগ্রামিং ল্যাঙ্গুয়েজ বি, এস. সি. জনসন এবং বি. ডব্লিউ. কার্নিগান, টেকনিক্যাল রিপোর্ট CS TR 8, বেল ল্যাবস (জানুয়ারি ১৯৭৩)। হানিওয়েল সরঞ্জামে জিকস (GCOS) সংস্করণ।
* বি ল্যাঙ্গুয়েজ রেফারেন্স ম্যানুয়াল, থিঙ্কএজ লিমিটেড। জিকস-এ ব্যবহৃত ভাষাটির প্রোডাকশন সংস্করণ, যার মধ্যে ভাষা এবং রানটাইম লাইব্রেরি অন্তর্ভুক্ত।

বিষয়শ্রেণী:পদ্ধতিগত প্রোগ্রামিং ভাষা
বিষয়শ্রেণী:প্রোগ্রামিং ভাষা
বিষয়শ্রেণী:১৯৬৯-এ তৈরি প্রোগ্রামিং ভাষা