ബി (പ്രോഗ്രാമിങ് ഭാഷ)

**ബി** എന്നത് 1969 ലെ ബെൽ ലാബ് സിർക്കായിൽ വികസിപ്പിച്ച ഒരു പ്രോഗ്രാമിങ് ഭാഷയാണ്. ഇത് ഡെന്നീസ് റിച്ചിയുമായി ചേർന്നുള്ള കെൻ തോംപ്സന്റെ പ്രവർത്തനമാണ്.

ബി സി പി എല്ലിൽ(BCPL)നിന്നും ഉരുത്തിരിഞ്ഞു, അതിന്റെ പേര് ബി സി പി എൽ എന്നത് ഒരു ചുരുക്കപ്പേരായിരിക്കാം. ബോൺ അടിസ്ഥാനമാക്കിയുള്ളതാകാം എന്ന് തോംസന്റെ സഹപ്രവർത്തകനായ ഡെന്നിസ് റിച്ചി ഊഹിച്ചു. മുമ്പു് മൾടിക്സ് ഉപയോഗിച്ചു് ആണ് തോംസൺ രൂപകൽപന ചെയ്തതു് പക്ഷേ, ഇത് യാതൊരു ബന്ധമില്ലാത്ത പ്രോഗ്രാമിങ് ഭാഷയായിരുന്നു.

ബിയുടെ ആവർത്തന രൂപകൽപന, നോൺ-ന്യുമെറിക്, യന്ത്ര-അധിഷ്ഠിത അപ്ലിക്കേഷനുകൾ, സിസ്റ്റം, ഭാഷാ സോഫ്റ്റ്‌വേർ തുടങ്ങിയവ.
## ചരിത്രം
തുടക്കത്തിൽ കെൻ തോംപ്സനും പിന്നീട് ഡെന്നിസ് റിച്ചിയും ചേർന്ന് ബി വികസിപ്പിച്ചെടുത്തു, തോംപ്സൺ മൾട്ടിക്സ് പ്രോജക്റ്റിൽ ഉപയോഗിച്ചിരുന്ന ബിസിപിഎൽ ഭാഷയെ അടിസ്ഥാനമാക്കിയിട്ടുള്ളതാണ്. ബിപിസിഎൽ സിസ്റ്റത്തിൽ ബി അത്യന്താപാക്ഷികമായിരുന്നു, അക്കാലത്തെ മിനി കമ്പ്യൂട്ടറുകളുടെ മെമ്മറി ശേഷിക്ക് അനുയോജ്യമാക്കാൻ വേണ്ടി ഏതെങ്കിലും തരത്തിലുള്ള ക്രമത്തിലല്ലാതെ തോംപ്സണ് ചെയ്യാൻ കഴിയുമെന്ന് കരുതി. ബി പിസിഎൽ നിന്ന് ബിയിലേക്കുള്ള പരിവർത്തനത്തിലും തോംപ്സന്റെ മുൻഗണനയ്ക്ക് യോജിച്ച മാറ്റങ്ങൾ ഉൾപ്പെടുത്തിയിട്ടുണ്ട്(ഒരു സാധാരണ പ്രോഗ്രാമിലെ വൈറ്റ്സ്പേസ് അല്ലാത്ത പ്രതീകങ്ങളുടെ എണ്ണം കുറയ്ക്കുന്ന രീതിയായിരിക്കും).ബിസിപിഎല്ലിന്റെ സാധാരണ അൽഗോളിന്റെ സിന്റാക്സിൽ മിക്കവയും ഈ പ്രക്രിയയിൽ വലിയ മാറ്റം വരുത്തിയിട്ടുണ്ട്. അസൈൻമെന്റ് ഓപ്പറേറ്റർ := നിന്ന് = ലേക്ക് മാറ്റി പുന:സ്ഥാപിച്ചു, രതിഷൗസർ(Rutishauser)ന്റെ സൂപ്പർപ്ലാനിൽ (ALGOL 58 ന്റെ സ്രോതസ്സ്: =) ഇക്വാളിറ്റി ഓപ്പറേറ്റർ = ന് പകരം == എന്ന് ആക്കി. 

ബിയ്ക്കുവേണ്ടി ആരിത്തമെറ്റിക് അസൈൻമെന്റ് ഓപ്പറേറ്റർമാരെ കണ്ടുപിടിച്ചുകൊണ്ട് തോംപ്സൺ, x = + y ഉപയോഗിച്ച് y ലേക്ക് x ചേർക്കാൻ (അതായത്, ഓപ്പറേറ്റർ എഴുതുന്നത് + ൽ) ഉപയോഗിച്ച് B യ്ക്കായി അരിത്മെറ്റിക് അസൈൻമെന്റ് ഓപ്പറേറ്റർമാരെ കണ്ടുപിടിച്ചുകൊണ്ട് x =+ y ഉപയോഗിച്ച് y ൽ x ഓപ്പറേറ്റർ +=) എഴുതുന്നു. തോംസൺ ബിയ്ക്ക് വേണ്ടി അരിത്മെറ്റിക് അസൈൻമെന്റ് ഓപ്പറ്റേഴ്സ് കണ്ടുപിടിച്ചു, x =+ y ഉപയോഗിച്ച് y യിൽ നിന്ന് x കൂട്ടാൻ (add) സാധിക്കും,(C യിൽ ഓപ്പറേറ്റർ എഴുതുന്നത് += എന്നാണ്). ബി ഇൻക്രിമെന്റ് ആൻഡ് ഡിക്രിമെന്റ് ഓപ്പറേറ്ററുകളും (++ and --) പരിചയപ്പെടുത്തി. അവയുടെ പ്രിഫിക്സ് അല്ലെങ്കിൽ പോസ്റ്റ്ഫിക്സ് സ്ഥാനം, ഓപ്പറേഷൻ മാറ്റുന്നതിനു മുമ്പോ ശേഷമോ മൂല്യം എടുത്തോ എന്ന് നിർണ്ണയിക്കുന്നു. ഈ കണ്ടുപിടിത്തം ബിയുടെ ആദ്യകാല പതിപ്പുകളിൽ ഉണ്ടായിരുന്നില്ല. ഡി.ഇ.സിയുടെ പി.ഡി.പി -11 ന്റെ ഓട്ടോ-ഇൻക്രിമെൻറ്, ഓട്ടോ ഡിക്രിമെന്റ് എന്നിവ അഡ്രസ് മോഡുകൾക്ക് വേണ്ടി അവർ നിർമ്മിച്ചതാണ് എന്ന് ഊഹാപോഹമുണ്ട്[ആര്(who)?]. ബി വികസിപ്പിച്ച സമയത്ത് പിഡിപി -11 ഇല്ലെന്നത് ചരിത്രപരമായി ഇത് അസാധ്യമാണ്.

ബി എന്നത് ടൈപ്പ് ലെസ്സ് അല്ലെങ്കിൽ കൂടുതൽ കൃത്യമായ ഒരു ഡാറ്റ തരമാണ്: ഒരു കമ്പ്യൂട്ടർ വാക്ക്. ഭൂരിഭാഗം ഓപ്പറേറ്ററുകളും (ഉദാ: +, -, *, /) ഇതിനെ ഒരു സംഖ്യയായി കണക്കാക്കി, പക്ഷേ മറ്റുള്ളവർ ഇത് ഒരു മെമ്മറി വിലാസമായി കണക്കാക്കിയിരുന്നു. മറ്റു പല രീതികളിലും അത് സി യുടെ ഒരു ആദ്യകാല പതിപ്പായി കാണപ്പെടുന്നു. സിയിൽ സാധാരണ I / O ലൈബ്രറിയിൽ നിന്ന് ഫങ്ഷനുകൾക്ക് സാമ്യമുള്ള ചില ലൈബ്രറികൾ ഉണ്ട്.

ആദ്യകാല ഉദ്യമങ്ങളിൽ ആദ്യകാല യുണിക്സ് ഉപയോഗിച്ചുള്ള ഡി.ഇ.സി പി.ഡി.പി -7, പി.ഡി.പി -11 മിനി കമ്പ്യൂട്ടറുകൾക്കും ഹണിവെൽ GE 645നും ഓപ്പറേറ്റിങ് സിസ്റ്റമായ ജിസിഒഎസിനു വേണ്ടി പ്രവർത്തിപ്പിച്ച 36-ബിറ്റ് മെയിൻഫ്രെയിമുകളുമാണ് ഉണ്ടായിരുന്നത്. പി.ഡി.പി. -7 നടപ്പിലാക്കിയ ആദ്യകാല പരിഷ്ക്കരണങ്ങൾ ത്രെഡഡ് കോഡുകളായി പരിണമിച്ചു. മെഷീൻ കോഡിനാൽ നിർമ്മിച്ച ടി.എം.ജി ഉപയോഗിച്ച് റിച്ചി ഒരു കമ്പൈലർ എഴുതി.
1970 ൽ പിഡിപി-11 ഏറ്റെടുത്തു, പോർട്ടിനായി ത്രെഡ് ചെയ്ത കോഡ് ഉപയോഗിച്ചു; ഒരു അസംബ്ലർ, ഡിസി, ബി ഭാഷ എന്നിവയും കമ്പ്യൂട്ടറിൽ ബൂട്ട്സ്ട്രാപ്പ് ചെയ്യാൻ ബി യിൽ എഴുതപ്പെട്ടിട്ടുണ്ട്. ഈ പി.ഡി.പി -11 കോൺഫിഗറേഷനുമായി വൈഎസിസി(yacc)യുടെ ഒരു ആദ്യകാല പതിപ്പ് ഉൽപ്പെടുത്തിയിരിക്കുന്നു. ഈ കാലയളവിൽ റിച്ചി അറ്റകുറ്റപ്പണികൾ ചെയ്തു.

ബിയുടെ ടൈപ്പ് ലെസ്സ് സ്വഭാവം, ഹണിവെൽ, പിഡിപി 7 എന്നിവയിലും പഴയ കമ്പ്യൂട്ടറുകളിലും സെൻസ് ഉണ്ടാക്കി, എന്നാൽ പിഡിപി -11 ൽ ഒരു പ്രശ്നമുണ്ടായിരുന്നു, കാരണംകാരക്ടർ ഡാറ്റ തരത്തിൽ ലളിതമായി പ്രവേശിക്കാൻ പ്രയാസമാണ്, മിക്ക ആധുനിക കമ്പ്യൂട്ടറുകളും പൂർണ്ണമായി അതിനെ പിന്തുണയ്ക്കുന്നു. 1971 ൽ ആരംഭിച്ച റിച്ചി, അതിന്റെ കമ്പൈലർ മെഷീൻ കോഡ് നിർമ്മിക്കുന്നതിനോടൊപ്പം ഭാഷയിൽ മാറ്റങ്ങൾ വരുത്തി, പ്രത്യേകിച്ച് വേരിയബിളുകൾക്കുള്ള ഡാറ്റാ ടൈപ്പിങ് ചേർക്കുന്നു.  1971 ലും 1972 ലും ബി "ന്യൂ ബി" (എൻ ബി) ആയി മാറി. തുടർന്ന് സി ആയി മാറി.

ബി ഏതാണ്ട്ഇല്ലാതായി, സി ഭാഷയുടെ രംഗപ്രവേശം അതിനെ അസാധുവാക്കി. എന്നിരുന്നാലും, ജിസിഒഎസ്(GCOS) മെയിൻഫ്രെയിമുകൾ, , ചില എംബഡഡ് സിസ്റ്റങ്ങളിൽ (2000 വരെയുള്ള) തുടങ്ങിയവ ഉപയോഗത്തിലുണ്ടായിരുന്നു (2014-ൽ),അതിനുള്ള കാരണങ്ങൾ ഇനിപറയുന്നവയാണ്: പരിമിതമായ ഹാർഡ്വെയർ; വിപുലമായ ലൈബ്രറികൾ, ഉപകരണങ്ങൾ, ലൈസൻസിംഗ് ചെലവ് പ്രശ്നങ്ങൾ; മറ്റുള്ളവർക്ക് ലളിതമായി ചെയ്യാൻ സാധിച്ചിരുന്നു,  .വളരെ സ്വാധീനമുള്ള അബെർമുഡ്(aberMUD) യഥാർത്ഥത്തിൽ ബി യിൽ എഴുതപ്പെട്ടിട്ടുള്ളതാണ്.
## ഉദാഹരണങ്ങൾ
ഇനിപ്പറയുന്ന ഉദാഹരണങ്ങൾ കെൻ തോപ്സണിന്റെ ബിയുടെ* ഉപയോക്താക്കൾക്കുള്ള റഫറൻസ് * താഴെ ചേർക്കുന്നു.

```c
/* The following function will print a non-negative number, n, to
   the base b, where 2<=b<=10.  This routine uses the fact that
   in the ASCII character set, the digits 0 to 9 have sequential
   code values.  */

printn(n, b) {
        extrn putchar;
        auto a;

        if (a = n / b)        /* assignment, not test for equality */
                printn(a, b); /* recursive */
        putchar(n % b + '0');
}
```



```c
/* The following program will calculate the constant e-2 to about
   4000 decimal digits, and print it 50 characters to the line in
   groups of 5 characters.  The method is simple output conversion
   of the expansion
     1/2! + 1/3! + ... = .111....
   where the bases of the digits are 2, 3, 4, . . . */

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');
}
```


## അവലംബം