B (linguaxe de programación)

**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

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
* *The Development of the C Language*, Dennis M. Ritchie. Pon B no contexto de BCPL e C.
* ''Users' Reference to B*, Ken Thompson. Describe a versión para PDP-11.
* *The Programming Language B'', S. C. Johnson & B. W. Kernighan, Technical Report CS TR 8, Bell Labs (Xaneiro 1973). Describe a versión para GCOS.