B (programovací jazyk) - B (programming language)
Navrhl | Ken Thompson |
---|---|
Vývojář | Ken Thompson , Dennis Ritchie |
Poprvé se objevil | 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 =+ y
syntaxe 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 +:= y
syntax). 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é
Portál počítačového programování
Poznámky
Reference
externí odkazy
- Stránka manuálu pro b (1) z Unix First Edition
- Vývoj jazyka C , Dennis M. Ritchie . Klade B v souvislosti s BCPL a C .
- Odkaz uživatelů na B , Ken Thompson. Popisuje verzi PDP-11 .
- The Programming Language B , SC Johnson & BW Kernighan, Technical Report CS TR 8, Bell Labs (leden 1973). Verze GCOS navybavení Honeywell .
- B Language Reference Manual , Thinkage Ltd. Produkční verze jazyka používaného v GCOS, včetně jazykové a runtime knihovny.