B (programozási nyelv)
B | |
Paradigma | procedurális programozás |
Megjelent | 1969 |
Tervező | Kenneth Lane 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.
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. [note 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ípus 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 memória szavakba töltött karakteradatok támogatása. A nyelv tipizálatlanságát hátránynak tekintették, ami Thompsont és Ritchie-t arra késztette, hogy dolgozzon ki egy új, belső és felhasználó által definiált típusokat támogató nyelv kibővített változatát, amely C programozási nyelv lett.
Történelem
Körülbelül 1969, 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. B lényegében a BCPL-rendszertől megfosztották minden olyan alkatrészt, amelyet Thompson úgy érzett, hogy nélkülözheti annak érdekében, hogy az az akkori miniszámítógépek memóriakapacitásának megfelelő legyen. 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 =
, valamint az egyenlő operátor =
váltotta ==
.
Thompson "kétcím-hozzárendelési operátorokat" x =+ y
szintaxissal, hogy y-t adjon x-hez (C-ben az operátor +=
ír). 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 (és a TMG-hez az ALGOL 68 x +:= y
szintaxisából érkezett). [3] Thompson tovább ment, feltalálva a növekmény és csökkentés operátorokat ( ++
és --
). Prefix , esetleg postfix pozíciójuk determinálja, hogy az értéket az operandus módosítása előtt , esetleg után vesszük-e. Ez az újítás nem a B legkorábbi verzióiban volt. Dennis Ritchie szerint az állampolgárok sok esetben azt feltételezték, hogy a DEC PDP-11 automatikus növekményes , továbbá automatikus csökkentési címmódjaihoz lettek létrehozva, de ez történelmileg lehetetlen, mivel a gép A B kifejlesztésekor még nem léteznek.
A for hurok pontosvesszőjét Ken Thompson kölcsönkapta Stephen Johnson munkájából. [4]
B típus nélküli, pontosabban egyetlen adattípusa van: a számítógépes szó. A legtöbb szolgáltató (pl +
, -
, *
, /
) kezeljük ezt, mint egy egész, de mások kezelik, mint egy memória cím is másolunk . Sok más szempontból nagyon hasonlított a C korai verziójára. Van néhány könyvtárfunkció, köztük olyanok, amelyek homályosan hasonlítanak a C szabványos I / O könyvtárának [2] Thompson szavai szerint: "B és a régi a régi C nagyon hasonló nyelv volt, kivéve az összes típust [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 nagygépek végezté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 port számára; egy assembler, dc és maga a B nyelv B betűvel íródott a számítógép indításához. A yacc korai verzióját készítették ezzel a PDP-11 konfigurációval. Ritchie ebben az időszakban vállalta a karbantartást. [8]
A B atipicitása értelmes a Honeywell, a PDP-7 , továbbá sok régebbi számítógépen, de ez nehézséget jelent a PDP-11 részére, mert nehéz elegánsan hozzáférni ahhoz, ami a PDP-11 , valamint a legmodernebb számítógépekkel rendelkezik. Karakter adattípus teljesen támogatott. 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, vagyis a változók adatainak megadásával. 1971 , ezen kívül 1972 között B "Új B" -vé (NB), majd C-vé fejlődött.
B majdnem kihalt, a C nyelv helyettesítette. Ugyanakkor továbbra is a GCOS nagyszámítógépek as of 2014 ) [9] és egyes beágyazott rendszereken ( as of 2000 ) különböző okokból: korlátozott hardver kis rendszerekben, kiterjedt könyvtárak, szerszámok, licencelési költségek, és egyszerűen elég jó a munkához. [10] A nagy hatású AberMUD eredetileg B nyelven íródott.
Példák
A következő példák Ken Thompson által a Felhasználók B-hivatkozásából (Users' Reference to B) [2]
/* 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;
Lásd még
Sablon:Portal-inline</img>
Megjegyzések
Hivatkozások
Külső linkek
- B (1) kézikönyv oldala a Unix First Edition kiadványból
- A C nyelv fejlődése, Dennis M. Ritchie . B-t helyezi a BCPL és a C összefüggésbe.
- A felhasználók hivatkozása B-re, Ken Thompsonra. 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.
- ↑ Ritchie, Dennis M. (1993. március 1.). „The Development of the C Language”. ACM SIGPLAN Notices 28 (3), 201–208. o. DOI:10.1145/155360.155580.
- ↑ a b c d Thompson: Users' Reference to B. Bell Laboratories, 1972. január 7. [2015. március 17-i dátummal az eredetiből archiválva]. (Hozzáférés: 2014. március 21.) Forráshivatkozás-hiba: Érvénytelen
<ref>
címke, „bur” nevű forráshivatkozás többször van definiálva eltérő tartalommal - ↑ Michael S. Mahoney: Interview with M.D. McIlroy. Princeton.edu, 1989. augusztus 18.
- ↑ a b 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."” Forráshivatkozás-hiba: Érvénytelen
<ref>
címke, „ken” nevű forráshivatkozás többször van definiálva eltérő tartalommal - ↑ Ritchie (1984). „The Evolution of the Unix Time-sharing System”. AT&T Bell Laboratories Technical Journal 63, 1577–1593. o. [2015. június 11-i dátummal az eredetiből archiválva].
- ↑ TMG. multicians.org
- ↑ Ritchie: The Development of the C Language. Bell Labs/Lucent Technologies. [2015. június 11-i dátummal az eredetiből archiválva].
- ↑ Forráshivatkozás-hiba: Érvénytelen
<ref>
címke; nincs megadva szöveg a(z)reader
nevű lábjegyzeteknek - ↑ 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-i dátummal az eredetiből archiválva]. (Hozzáférés: 2014. március 21.)
Forráshivatkozás-hiba: <ref>
címkék léteznek a(z) „note” csoporthoz, de nincs hozzá <references group="note"/>