B (linguaggio)

Da Wikipedia, l'enciclopedia libera.
B
Autore Ken Thompson, Dennis Ritchie
Data di origine 1969
Utilizzo General purpose
Paradigmi Procedurale, Strutturato
Tipizzazione Statica, debole
Estensioni comuni .b
Influenzato da BCPL, PL/I
Ha influenzato C
Implementazione di riferimento
Sistema operativo Unix, GCOS

Il linguaggio di programmazione B, ispirato al BCPL, è un linguaggio ormai obsoleto e viene in pratica ricordato solo perché da esso trasse origine uno dei linguaggi più utilizzati al mondo, il C. Sviluppato principalmente da Ken Thompson presso i Bell Laboratories della AT&T Corp., con contributi di Dennis Ritchie, fece la sua comparsa attorno al 1969.

Essenzialmente si tratta del BCPL, privato di tutti quei componenti di cui Thompson ritenne di poter fare a meno, così da poterlo utilizzare sui minicomputer di quel tempo che avevano una quantità di memoria limitata.

Come il BCPL e il FORTH, il B aveva un unico tipo di dato, la parola (word, in inglese). La maggior parte delle operazioni trattava la parola come un intero (i.e. +, -, *, /) ma altre come un indirizzo di memoria da dereferenziare. In molti altri casi assomigliava molto a una versione preliminare del C. Esistevano alcune librerie di funzioni, inclusa una che vagamente ricordava le funzioni che poi andranno a far parte della libreria IO standard del C.

Le prime implementazioni furono per i minicomputer DEC PDP-7 e PDP-11 che utilizzavano il sistema operativo UNIX e per i mainframe a 36 bit Honeywell su sistema operativo GCOS.

Esempio[modifica | modifica wikitesto]

Il seguente esempio è estratto da "Users' Reference to B" di Ken Thompson.

/* La seguente funzione stampa un numero non negativo, n, in
  base b, dove 2<=b<=10.  Questa routine sfrutta il fatto che
  nel sistema di caratteri ASCII i codici delle cifre da O a 9 
  hanno valori in sequenza.  */
 
printn(n,b) {
        extrn putchar;
        auto a;
 
        if(a=n/b) /* assegnamento, non un test di eguaglianza */
                printn(a, b); /* ricorsivo */
        putchar(n%b + '0');
}