B é o nome dun linguaxe de programación desenvolvido nos Bell Labs, predecesor do linguaxe de programación C.
Foi maioritariamente un traballo de Ken Thompson con contribucións de Dennis Ritchie. Apareceu primeiro sobre o ano 1969.
Historia
B foi esencialmente unha simplificación da linguaxe BCPL, eliminando calquera compoñente que Thompson considerase prescindible de forma que coubese na memoria das minicomputadoras da época.
A linguaxe tamén incluíu algúns cambios de acordo coas preferencias de Thompson (a maioría para reducir o número de caracteres dun programa típico).
Do mesmo xeito que BCPL, B só tiña un tipo de datos, que correspondía cunha palabra de máquina. A maioría de operadores manexábano como un enteiro; por exemplo + (suma), - (resta), * (multiplicación) ó / (división).
Outros operadores tratábano como unha dirección de memoria á que facer referencia: un punteiro.
B ofrecía operadores que permitían obter a dirección dunha determinada variable, ou escribir na dirección apuntada por unha variable punteiro.
As primeiras implementaciones foron para as minicomputadoras PDP-7 e PDP-11 executando versións antigas de UNIX; e para os mainframes de 36 bits Honeywell executando o sistema GCOS.
Evolución
A natureza sen tipos de B tiña sentido no Honeywell, na PDP-7 e moitas outras computadoras antigas, pero foi un problema na PDP-11 porque era difícil acceder a tipos de caracteres de datos que a PDP-11 e a maioría de computadoras modernas soportaban. Comezando en 1971, Ritchie fixo cambios á linguaxe ao mesmo tempo que convertía a súa compilador para producir linguaxe de máquina nativo.
O máis notable foi a adición de tipos de datos diferentes para as variables.
Durante 1971 e 1972 B evolucionou primeiro en Novo "B" (New B, NB) e despois en C. Máis tarde, a principios de 1973, foi engadido un preprocesador a petición de Alan Snyder.
O esforzo foi o suficientemente completo neste ano como para que durante o verán o núcleo do sistema UNIX para a PDP-11 fose reescrito en C.
Durante o período 1972-1973 houbo a necesidade de portalo ao Honeywell 635 e ao IBM 360/370, polo que Mike Lesk escribiu o "paquete de E/S portable" que se convertería na "E/S estándar" (standard I/Ou ó stdio) da linguaxe C.
B continuouse utilizando ata os anos 90 nos mainframes Honeywell e en certos sistemas embedidos por unha variedade de razóns, incluíndo o uso de hardware limitado nestes sistemas; librerías extensivas, ferramentas; ou simplemente porque era o suficientemente bo como para facer o traballo.
O enormemente influencial AberMUD foi escrito en B.
Nome
B foi enormemente influenciado por BCPL, e o seu nome foi probablemente unha contracción de BCPL "".
Con todo é posible que o seu nome baseouse no linguaxe de programación Bon, unha linguaxe máis antiga e non relacionado con B, deseñado por Thompson para o seu uso en MULTICS.
Exemplos
A seguinte función de exemplo está tomada do Users' Reference to B por Ken Thompson:
/* A seguinte función imprime un número non-negativo, n, en
base b, onde 2<=b<=10. Esta rutina utiliza o feito de
que no xogo de carácteres ANSCII, os digitos 0 a 9
teñen valores de código secuenciales.
*/
printn(n,b) {
extrn putchar;
auto a;
if(a=n/b) /* asignación, non comprobación de igualdade */
printn(a, b); /* recursivo */
putchar(n%b + '0');
}
Este programa de exemplo en B utiliza a función anterior para sumar tres números imprimindo por pantalla o resultado.
main( ) {
extrn printn;
auto a, b, c, sum;
a = 1; b = 2; c = 3;
sum = a+b+c;
printn(sum,10);
}
Ligazóns externas