Programski jezik B
Prográmski jêzik B ali kar B je nizkonivojski programski jezik, ki so ga razvili v Bellovih laboratorijih. Danes je že skoraj izumrl in ostaja le še kot zgodovinska zanimivost, ker predstavlja predhodno fazo med jezikoma BCPL in C-jem. Jezik je večinoma delo Kena Thompsona ob pomoči Dennisa Ritchieja. Pojavil se je leta 1969, oziroma nekako ob tem času. B se je razvil iz jezika BCPL, ime pa je verjetno skrčitev imena BCPL. Ritchie je domneval, da ime lahko izhaja iz besede Bon, zgodnejšega, vendar nepovezanega programskega jezika, ki ga je Thompson razvil za uporabo v operacijskem sistemu Multics.[a] B je bil ustvarjen za rekurzivne, nenumerične, strojno neodvisne aplikacije, kot je sistemska in jezikovna programska oprema.[2] Kakor BCPL in Forth je B poznal le en podatkovni tip, strojno besedo (word) – naravni format pomnilniške besede osnovnega stroja, karkoli že je bil. Večina operatorjev je obravnavala besedo kot celo število ( Ko so postali pogosti stroji z obdelavo standardnega 7-bitnega nabora znakov ASCII, zlasti Digital Equipment Corporation (DEC) PDP-11, ki je prispel v Bellove laboratorije, je postala pomembna podpora za znakovne podatke, shranjene v pomnilniških besedah. Breztipska narava jezika je bila videna kot slabost, zaradi česar sta Thompson in Ritchie razvila razširjeno različico jezika, ki je podpirala nove notranje in uporabniško definirane tipe, in ti so postali vseprisotni programski jezik C. Zgodovina
Okoli leta 1969 sta Ken Thompson[1] in kasneje Dennis Ritchie[2] razvila jezik B, ki je temeljil predvsem na jeziku BCPL Thompson ga je uporabljal v projektu operacijskega sistema s časovno souporabo Multics. B je bil v bistvu sistem BCPL, brez tistih komponent za katere je Thompson menil, da lahko brez njih shaja, da bi se prilegali pomnilniški zmogljivosti tedanjih miniračunalnikov. Prehod z BCPL na B je vključeval tudi spremembe, ki so ustrezale Thompsonovim preferencam (večinoma v smeri zmanjšanja števila znakov, ki niso presledki, v tipičnem programu).[1] Velik del tipične skladnje BCPL, podobne ALGOLu, se je v tem procesu precej spremenil. Dodelitveni operator Thompson je dodal »naslovna dodelitvena operatorja« z uporabo skladnje Ken Thompson si je izposodil različico zanke for s podpičjem iz dela Stephena Curtisa Johnsona.[5] B je breztipni oziroma natančneje ima en podatkovni tip: računalniško besedo. Večina operatorjev (npr. Zgodnje implementacije so bile za miniračunalnika DEC PDP-7 in PDP-11, ki sta uporabljala zgodnji Unix, in 36-bitne osrednje računalnike Honeywell GE 645[6] z operacijskim sistemom GCOS. Najzgodnejše implementacije PDP-7 so bile prevedene v nitno kodo, Ritchie pa je napisal prevajalnik z uporabo TMG, ki je ustvaril strojno kodo.[7][1][8] Leta 1970 je bil pridobljen PDP-11 in za prenos je bila uporabljena nitna koda. Zbirnik, dc in sam jezik B so bili napisani v jeziku B za zagon računalnika. Zgodnja različica yacc je bila izdelana s to konfiguracijo PDP-11. Ritchie je v tem obdobju prevzel vzdrževanje.[1][8] Breztipna narava jezika B je bila smiselna na računalnikih Honeywell, PDP-7 in mnogih starejših računalnikih, vendar je bila na PDP-11 težava, ker je bilo težko elegantno dostopati do znakovnih podatkovnih tipov, ki ga PDP-11 in večina sodobnih računalnikov v celoti podpirajo. Od leta 1971 je Ritchie začel spreminjati jezik, medtem ko je njegov prevajalnik pretvarjal v strojno kodo, predvsem z dodajanjem podatkovnega tipiziranja za spremenljivke. Med letoma 1971 in 1972 se je jezik B razvil v »New B« (NB) in nato v C.[1] B je skoraj izumrl, saj ga je nadomestil jezik C.[9] Vendar se je leta 2014 še vedno uporabljal na osrednjih računalnikih z GCOS[10] in leta 2000 na nekaterih vgrajenih sistemih iz različnih razlogov: omejena strojna oprema v majhnih sistemih, obsežne knjižnice, orodja, težave s stroški licenciranja in preprosto to, da je dovolj dober za to delo.[9] Zelo vplivni MUD – AberMUD je bil prvotno napisan v jeziku B. ZglediNaslednja zgleda programov sta iz Users' Reference to B Kena Thompsona:[2] /* Naslednja funkcija bo iztiskala nenegativno število n v
bazi b, kjer je 2<=b<=10. Podprogram uporablja dejstvo, da
imajo števke od 0 do 9 v naboru znakov ASCII zaporedne
kodne vrednosti. */
printn(n, b) {
extrn putchar;
auto a;
/* Wikipedijina opomba: ključna beseda auto označuje
(deklarira) spremenljivko s samodejnim
shranjevanjem (življenjska doba je obseg funkcije),
ne pa s »samodejno tipizacijo« kot v C++11. */
if (a = n / b) /* določitev in ne test enakosti */
printn(a, b); /* rekurzivno */
putchar(n % b + '0');
}
/* Naslednji program bo izračunal konstanto e-2 na približno
4000 decimalnih mest in jo izpisal v vrstico s 50 znaki v
skupinah po 5 znakov. Metoda je preprosta pretvorba
izhoda razvoja
1/2! + 1/3! + ... = .111...
kjer so osnove številk 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');
}
v[2000];
n 2000;
Opombe
Sklici
Viri
|