B (programozási nyelv)
| B | |
| Paradigma | procedurális programozás |
| Megjelent | 1969 |
| Tervező | Ken Thompson |
| Fejlesztő | |
| Hatással volt rá | BCPL |
A B egy programozási nyelv, amelyet a Bell Labs fejlesztett ki 1969 körül. Ken Thompson és Dennis Ritchie fejlesztette ki, és jelentős szerepet játszott a modern programozási nyelvek fejlődésében.
A B a BCPL-ből származik, és neve valószínűleg a BCPL összehúzódása lehet. Thompson munkatársa, Dennis Ritchie feltételezte, hogy a név Bon, egy korábbi, de nem rokon programozási nyelvre épülhet, amelyet Thompson a Multics-hoz tervezett. [* 1]
A B-t rekurzív, nem numerikus, gépfüggetlen alkalmazásokhoz, például rendszer- és nyelvi szoftverekhez tervezték.[2] Típus nélküli nyelv volt, az egyetlen adattípusa az alapul szolgáló gép természetes memória szóformátuma volt, bármi is legyen az. A kontextustól függően a szót egész számként vagy memóriacímként kezelték.
Amint az ASCII feldolgozással rendelkező gépek általánossá váltak, nevezetesen a Bellhez érkezett DEC PDP-11, fontossá vált a karakteradatok memória szavakba történő beépítésének támogatása. A nyelv tipizálatlanságát hátránynak tekintették, ami Thompsont és Ritchie-t arra késztette, hogy dolgozzanak ki egy új, mind belső, mind felhasználó által definiált típusokat támogató nyelvet, amely később a C programozási nyelv lett.
Történelem
[szerkesztés | forrásszöveg szerkesztése]Körülbelül 1969-ben Ken Thompson és később Dennis Ritchie[2] fejlesztette ki a B-t, főként a Thompson BCPL nyelvre építve, amelyet a Multics projektben használtak. Lényegében a BCPL-rendszert megfosztották minden olyan elemtől, amelyről Thompson úgy érezte, hogy nélkülözheti annak érdekében, hogy az megfeleljen az akkori miniszámítógépek korlátozott memóriakapacitásának. A BCPL-B átmenet magában foglalta azokat a változtatásokat is, amelyek Thompson preferenciáihoz igazodtak (főként egy tipikus program nem fehér szóközű karaktereinek csökkentése mentén). A BCPL tipikus ALGOL-szerű szintaxisának nagy része meglehetősen erősen megváltozott ebben a folyamatban. Az értékadó operátor := változott =-re, valamint az egyenlőség vizsgálatára szolgáló operátor = helyett == lett.
Thompson bevezette a "kétcímű-hozzárendelési operátorokat" x =+ y szintaxissal, hogy y-t adjon x-hez (C-ben az operátor később += formára módosult). Ez a szintaxis Douglas McIlroy TMG-implementációjából származott, amelyben először B fordítóját hajtották végre (a TMG-hez pedig az ALGOL 68 x +:= y szintaxisából érkezett).[3] Thompson tovább fejlesztette a nyelvet, feltalálva a növekmény és csökkentés operátorokat (++ és --). Ezek prefix vagy postfix pozíciója határozza meg, hogy az operandus értékét a módosítás előtt vagy után vesszük-e figyelembe. Ez az újítás nem volt része a B legkorábbi verzióinak. Dennis Ritchie szerint sokan azt feltételezték, hogy ezek az operátorok a DEC PDP-11 automatikus növekményes és csökkentési címzési módjaihoz lettek kifejlesztve, de ez történelmileg lehetetlen, mivel ezek az operátorok a gép megjelenése előtt már léteztek.
A for hurok pontosvesszős szintaxisát Ken Thompson Stephen Johnson munkájából kölcsönözte.[4]
A B típus nélküli nyelv volt, pontosabban egyetlen adattípusa volt: a számítógépes szó. A legtöbb operátor (pl. +, -, *, /) ezt egész számként kezelte, de más operátorok memóriacímként használták fel. Számos más szempontból a B nagyon hasonlított a C korai verzióihoz. Rendelkezett néhány könyvtárfunkcióval, köztük olyanokkal, amelyek homályosan hasonlítottak a C szabványos I/O könyvtárához.[2] Thompson szavai szerint: "B és a korai C nagyon hasonló nyelvek voltak, kivéve az összes típus [kezelését C-ben]".[4]
A korai megvalósításokat a korai Unixot használó DEC PDP-7 és PDP-11 minikomputerek, valamint a GCOS operációs rendszert futtató Honeywell GE 645[5] 36 bites nagyszámítógépeken futtatták. A legkorábbi PDP-7 implementációk szálkódra fordultak, és Ritchie írt egy fordítót a TMG segítségével, amely gépi kódot készített.[6][7] 1970-ben beszereztek egy PDP-11-et és menetes kódot használtak a portoláshoz; egy assembler, a dc számológép és maga a B nyelv B-ben íródott a számítógép indításához. A yacc korai verzióját is ezen a PDP-11 konfigurációban fejlesztették ki. Ritchie ebben az időszakban vette át a nyelv karbantartását.[8]
A B típus nélkülisége jól működött a Honeywell, a PDP-7 és sok régebbi számítógépen, de nehézségeket okozott a PDP-11 és a későbbi modern architektúrák számára, különösen a karakteres adatok kezelésénél. 1971-től Ritchie megváltoztatta a nyelvet, miközben a fordítót konvertálta gépi kód előállítására, bevezetve a különböző változótípusok támogatását. 1971–1972 között a B nyelv "Új B"-vé (NB) fejlődött, majd ebből született meg a C.
A B nyelv ugyan majdnem teljesen eltűnt, helyét a C nyelv vette át, azonban továbbra is használatban maradt bizonyos GCOS nagyszámítógépeken[9] és egyes beágyazott rendszereken különböző okokból: korlátozott hardvererőforrások kisebb rendszerekben, kiterjedt könyvtárak és eszközök elérhetősége, licencelési költségek elkerülése, valamint egyszerűen azért, mert bizonyos feladatokra tökéletesen megfelelt.[10] Érdekesség, hogy a nagy hatású AberMUD, az egyik első többfelhasználós virtuális világot megvalósító rendszer eredetileg B nyelven íródott.
Példák
[szerkesztés | forrásszöveg szerkesztése]A következő példák Ken Thompson által a Felhasználók B-hivatkozásából (Users' Reference to B)[2] származnak:
/* 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;
/* Wikipedia note: auto declares a variable with automatic
storage (lifetime is function scope), not "automatic typing"
as in C++11. */
if (a = n / b) /* assignment, not test for equality */
printn(a, b); /* recursive */
putchar(n % b + '0');
}
/* 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');
}
v[2000];
n 2000;
Megjegyzések
[szerkesztés | forrásszöveg szerkesztése]- ↑ "Its name most probably represents a contraction of BCPL, though an alternate theory holds that it derives from Bon [Thompson 69], an unrelated language created by Thompson during the Multics days. Bon in turn was named either after his wife Bonnie or (according to an encyclopedia quotation in its manual), after a religion whose rituals involve the murmuring of magic formulas."[1]
Hivatkozások
[szerkesztés | forrásszöveg szerkesztése]- ↑ Ritchie, Dennis M. (1993. március). "The Development of the C Language". ACM SIGPLAN Notices. 28 (3): 201–208. doi:10.1145/155360.155580.
- 1 2 3 4 Thompson, Ken (1972. január 7.). "Users' Reference to B" (PDF). Bell Laboratories. 2015. március 17. dátummal az eredeti (PDF) címről archiválva. Hozzáférés: 2014. március 21..
- ↑ Michael S. Mahoney (1989. augusztus 18.). "Interview with M.D. McIlroy". Princeton.edu.
- 1 2 Ken Thompson. "VCF East 2019 -- Brian Kernighan interviews Ken Thompson". Hozzáférés: 2020. november 16..
I saw Johnson's semicolon version of the for loop and I put that in [B], I stole it.
- ↑ Ritchie, Dennis M. (1984). "The Evolution of the Unix Time-sharing System". AT&T Bell Laboratories Technical Journal. 63: 1577–1593. 2015. június 11. dátummal az eredeti címről archiválva.
- ↑ "TMG". multicians.org.
- ↑ Ritchie, Dennis M. "The Development of the C Language". Bell Labs/Lucent Technologies. 2015. június 11. dátummal az eredeti címről archiválva.
- ↑ M. D. McIlroy (1987). "A Research Unix reader: annotated excerpts from the Programmer's Manual, 1971–1986" (PDF). CSTR. Bell Labs.
- ↑ "Thinkage UW Tools Package". Thinkage, Ltd. Hozzáférés: 2014. március 26..
- ↑ Johnson and Kernighan. "THE PROGRAMMING LANGUAGE B". Bell Laboratories. 2015. június 11. dátummal az eredeti címről archiválva. Hozzáférés: 2014. március 21..
Fordítás
[szerkesztés | forrásszöveg szerkesztése]Ez a szócikk részben vagy egészben a B (programming language) című angol Wikipédia-szócikk ezen változatának fordításán alapul. Az eredeti cikk szerkesztőit annak laptörténete sorolja fel. Ez a jelzés csupán a megfogalmazás eredetét és a szerzői jogokat jelzi, nem szolgál a cikkben szereplő információk forrásmegjelöléseként.
További információk
[szerkesztés | forrásszöveg szerkesztése]- B (1) kézikönyv oldala a Unix First Edition kiadványból
- A C nyelv fejlődése, Dennis M. Ritchie a B-t helyezi a BCPL és a C összefüggésbe.
- A felhasználók hivatkozása B-re, Ken Thompson dokumentációja. Részletesen leírja a PDP-11 verziót.
- A programozási nyelv B, SC Johnson & BW Kernighan, CS TR 8 műszaki jelentés, Bell Labs (1973. január). A GCOS-verzió a Honeywell berendezésen.
- B Nyelvi kézikönyv, Thinkage Ltd. A GCOS-on használt nyelv gyártási verziója, beleértve a nyelvet és a futásidejű könyvtárat is.