B (programovací jazyk) - B (programming language)

B
Navrhl Ken Thompson
Vývojář Ken Thompson , Dennis Ritchie
Poprvé se objevil 1969 ; Před 52 lety ( 1969 )
Kázeň při psaní bez typu (vše je slovo )
Rozšíření názvu souboru .b
Ovlivněn
BCPL , PL/I , TMG
Ovlivněn
C

B je programovací jazyk vyvinutý v Bell Labs kolem roku 1969. Byl vyvinut Kenem Thompsonem a Dennisem Ritchiem .

B byl odvozen z BCPL a jeho název může být kontrakcí BCPL. Thompsonův spolupracovník Dennis Ritchie spekuloval, že název může být založen na Bonovi, dřívějším, ale nesouvisejícím programovacím jazyce, který Thompson navrhl pro použití na Multics .

B byl navržen pro rekurzivní, nečíselné aplikace nezávislé na stroji, jako je systémový a jazykový software. Byl to jazyk bez typů, přičemž jediným datovým typem byl formát přirozeného paměťového slova základního stroje , ať už to bylo cokoli. V závislosti na kontextu bylo se slovem zacházeno buď jako s celým číslem, nebo s adresou paměti .

Jak se stroje se zpracováním ASCII staly běžnými, zejména DEC PDP-11, který dorazil do Bell, stala se podpora znakových dat plněných paměťovými slovy důležitými. Bez typu povaha jazyka byl viděn jako nevýhodu, která vedla Thompson a Ritchie vyvinout rozšířené verzi jazyka nosné nové vnitřní a uživatelem definované typy, které se stalo C programovací jazyk .

Dějiny

Kolem roku 1969 Ken Thompson a později Dennis Ritchie vyvinuli B na základě jazyka BCPL, který Thompson použil v projektu Multics . B byl v podstatě systém BCPL zbavený všech komponent, o kterých se Thompson cítil, že by se bez nich mohl obejít, aby se vešel do paměťové kapacity tehdejších minipočítačů. Přechod BCPL na B také zahrnoval změny provedené tak, aby vyhovovaly Thompsonovým preferencím (většinou v souladu se snížením počtu znaků bez mezer v typickém programu). V tomto procesu byla značná část typické ALGOL syntaxe BCPL podobná. Operátor přiřazení :=se vrátil k =of Rutishauser s SUPERPLAN a operátor rovnosti =byl nahrazen ==.

Thompson přidal „operátory přiřazení dvou adres“ pomocí x =+ ysyntaxe k přidání y do x (v C je napsán operátor +=). Tato skladba pochází z Douglas McIlroy ‚plnění ze dne TMG , v níž byl B je kompilátor první implementována (a to přišlo k TMG od ALGOL 68 ‘ s x +:= ysyntax). Thompson šel dále tím, že vynalezl operátory přírůstku a úbytku ( ++a --). Jejich předponová nebo postfixová poloha určuje, zda je hodnota převzata před nebo po změně operandu. Tato inovace nebyla v nejranějších verzích B. Podle Dennise Ritchieho lidé často předpokládali, že byly vytvořeny pro režimy automatického přírůstku a automatického snižování adresy DEC PDP-11, ale to je historicky nemožné, protože stroj to neudělal. neexistují, když byl B poprvé vyvinut.

Středníkovou verzi smyčky for si vypůjčil Ken Thompson z díla Stephena Johnsona .

B je bez typu, nebo přesněji má jeden datový typ: počítačové slovo. Většina operátorů (například +, -, *, /) léčených to jako celé číslo, ale jiní ji zpracuje jako adresa paměti se dereferenced . V mnoha dalších ohledech to vypadalo hodně jako raná verze C. Existuje několik knihovních funkcí, včetně některých, které matně připomínají funkce ze standardní I/O knihovny v C. Podle Thompsonových slov: „B a staré staré C byly velmi velmi podobné jazyky až na všechny typy [v C] “.

Rané implementace byly pro minipočítače DEC PDP-7 a PDP-11 využívající raný Unix a 36bitové sálové počítače Honeywell GE 645 s operačním systémem GCOS . Nejdříve implementace PDP-7 zkompilované do závitového kódu a Ritchie napsal kompilátor pomocí TMG, který produkoval strojový kód. V roce 1970 byl pořízen PDP-11 a pro port byl použit závitový kód; montér,DC, a samotný jazyk B byl napsán v B pro zavedení počítače. S touto konfigurací PDP-11 byla vytvořena raná verze yacc . Ritchie převzal během tohoto období údržbu.

Beztypová povaha B dávala smysl na počítačích Honeywell, PDP-7 a mnoha starších počítačích, ale byla problémem na PDP-11, protože bylo obtížné elegantně přistupovat k datovému typu znaků, který PDP-11 a většina moderních počítačů plně podporují . Počínaje rokem 1971 provedl Ritchie změny jazyka při převodu kompilátoru na strojový kód, zejména přidáním typizace dat pro proměnné. V letech 1971 a 1972 se B vyvinul v „Nové B“ (NB) a poté C.

B je téměř zaniklý, která byla nahrazena jazyka C . Nicméně i nadále vidí použití na sálových počítačích GCOS (od roku 2014) a na určitých vestavěných systémech (od roku 2000) z různých důvodů: omezený hardware v malých systémech, rozsáhlé knihovny, nástroje, problémy s licenčními náklady a prostě dobrý dost na práci. Velmi vlivný AberMUD byl původně napsán v B.

Příklady

Následující příklady pocházejí z Uživatelského odkazu na B od Kena Thompsona:

/* 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: the auto keyword 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;

Viz také

Octicons-terminal.svg Portál počítačového programování

Poznámky

Reference

externí odkazy