Share to: share facebook share twitter share wa share telegram print page

Programski jezik B

B
Začetna izdaja1969
OblikovalKenneth Thompson
RazvijalecBellovi laboratoriji[d] in Kenneth Thompson
Tipizacijabrez tipov (vse je strojna beseda)
Večje implementacije
VpliviBCPL, PL/I, TMG
Vplival naC
Običajna končnica datoteke.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 (+, -, *, /), drugi pa kot pomnilniški naslov. Drugače je bil jezik zelo podoben zgodnjim različicam C-ja.

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

Semantika BCPL z veliko skladnje SMALGOL

— Ken Thompson, [3]

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 := se je vrnil na = iz Rutishauserjevega visokonivojskega jezika Superplan, operator enakosti = pa je nadomestil ==.

Thompson je dodal »naslovna dodelitvena operatorja« z uporabo skladnje x =+ y za seštevanje y z x (v jeziku C je operator zapisan obrnjeno +=). Ta skladnja izvira iz implementacije TMG Douglasa McIlroya, v kateri je bil prvič implementiran prevajalnik B (v TMG pa je prišla iz skladnje x +:= y v jeziku ALGOL 68).[1][4] Thompson je šel še dlje in izumil operatorja za povečanje in zmanjšanje (++ in --). Njun položaj predzapisa (predpone, prefiksa) ali pozapisa (postfiksa) določa, ali se vrednost upošteva pred ali po spremembi operanda. Ta inovacija ni bila prisotna v najzgodnejših različicah B. Po Ritchiejevih besedah so ljudje pogosto domnevali, da sta bila ustvarjena za načina samodejnega povečanja in samodejnega zmanjšanja naslova DEC PDP-11, vendar je to zgodovinsko nemogoče, saj stroj ni obstajal, ko je bil B prvič razvit.[1]

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. +, -, *, /) ga je obravnavala kot celo število, drugi pa kot pomnilniški naslov, ki ga je treba dereferencirati. V mnogih drugih pogledih je bil zelo podoben zgodnji različici jezika C. Obstaja nekaj knjižničnih funkcij, vključno z nekaterimi, ki nejasno spominjajo na funkcije iz standardne knjižnice V/I (stdio.h) v jeziku C.[2] Po Thompsonovih besedah: »B in stari stari C sta bila zelo, zelo podobna jezika, razen vseh tipov [v jeziku C]«.[5]

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 MUDAberMUD je bil prvotno napisan v jeziku B.

Zgledi

Naslednja 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

  1. »Njegovo ime verjetno predstavlja skrčitev BCPL, čeprav druga teorija pravi, da se je razvilo iz besede Bon [Thompson 69], nepovezanega jezika, ki ga je ustvaril Thompson v času Multicsa. Bon je bil poimenovan ali po njegovi ženi Bonnie, ali (po enciklopedičnem navedku v njegovem priročniku) po religiji, katere rituali vsebujejo mrmranje čarobnih formul.«[1]

Sklici

  1. 1,0 1,1 1,2 1,3 1,4 1,5 1,6 1,7 Ritchie (1993).
  2. 2,0 2,1 2,2 2,3 Thompson (1972).
  3. Jensen (2020).
  4. Mahoney (1989).
  5. 5,0 5,1 Thompson (2019).
  6. Ritchie (1984).
  7. »TMG«, multicians.org (v angleščini)
  8. 8,0 8,1 McIlroy (1987).
  9. 9,0 9,1 Johnson; Kernighan (1997).
  10. Thinkage UW Tools Package (v angleščini), Thinkage, Ltd., pridobljeno 26. marca 2014

Viri


Prefix: a b c d e f g h i j k l m n o p q r s t u v w x y z 0 1 2 3 4 5 6 7 8 9

Portal di Ensiklopedia Dunia

Kembali kehalaman sebelumnya