Ir al contenido

B (lenguaje de programación)

De Wikipedia, la enciclopedia libre
(Redirigido desde «Lenguaje de programación B»)
B
Bell Labs y Ken Thompson
Información general
Paradigma Imperativo (procedural)
Apareció en 1969
Diseñado por Kenneth L. Thompson, Dennis M. Ritchie
Sistema de tipos Sin tipos
Implementaciones Múltiples
Influido por BCPL
Ha influido a C

B es el nombre de un lenguaje de programación desarrollado en los Bell Labs, predecesor del lenguaje de programación C.

Fue mayoritariamente un trabajo de Kenneth L. Thompson con contribuciones de Dennis M. Ritchie publicado por primera vez en el año 1969 [cita requerida].

Historia

[editar]

B fue esencialmente una simplificación del lenguaje BCPL, eliminando cualquier componente que Thompson considerase prescindible de forma que cupiese en la memoria de las minicomputadoras de la época. El lenguaje también incluyó algunos cambios de acuerdo con las preferencias de Thompson (la mayoría para reducir el número de caracteres de un programa típico).

Al igual que BCPL, y FORTH, B sólo tenía un tipo de datos, que correspondía con una palabra de máquina. La mayoría de operadores lo manejaban como un entero; por ejemplo + (suma), - (resta), * (multiplicación) o / (división). Otros operadores lo trataban como una dirección de memoria a la que hacer referencia: un puntero. B ofrecía operadores que permitían obtener la dirección de una determinada variable, o escribir en la dirección apuntada por una variable puntero.

Las primeras implementaciones fueron para las minicomputadoras PDP-7 y PDP-11 ejecutando versiones antiguas de UNIX; y para los mainframes de 36 bits Honeywell ejecutando el sistema GCOS.

Evolución

[editar]

La naturaleza sin tipos de B tenía sentido en el Honeywell, en la PDP-7 y muchas otras computadoras antiguas, pero fue un problema en la PDP-11 porque era difícil acceder a tipos de caracteres de datos que la PDP-11 y la mayoría de computadoras modernas soportaban. Comenzando en 1971, Ritchie hizo cambios al lenguaje al mismo tiempo que convertía su compilador para producir lenguaje de máquina nativo. El más notable fue la adición de tipos de datos diferentes para las variables.

Durante 1971 y 1972 B evolucionó primero en "Nuevo B" (New B, NB) y después en C. Más tarde, a principios de 1973, fue añadido un preprocesador a petición de Alan Snyder.

El esfuerzo fue lo suficientemente completo en este año como para que durante el verano el núcleo del sistema UNIX para la PDP-11 fuese reescrito en C.

Durante el periodo 1972-1973 hubo la necesidad de portarlo al Honeywell 635 y al IBM 360/370, por lo que Mike Lesk escribió el "paquete de E/S portable" que se convertiría en la "E/S estándar" (standard I/O o stdio) del lenguaje C.

B se continuó utilizando hasta los años 90 en los mainframes Honeywell y en ciertos sistemas embebidos por una variedad de razones, incluyendo el uso de hardware limitado en estos sistemas; librerías extensivas, herramientas; o simplemente porque era lo suficientemente bueno como para hacer el trabajo.

Nombre

[editar]

B fue enormemente influido por BCPL, y su nombre fue probablemente una contracción de "BCPL". Sin embargo es posible que su nombre se hubiera basado en el lenguaje de programación Bon, un lenguaje más antiguo y no relacionado con B, diseñado por Thompson para su uso en MULTICS.

Ejemplos

[editar]

La siguiente función de ejemplo está tomada del Users' Reference to B por Ken Thompson:

/* La siguiente función imprime un número no negativo, n, en
   base b, donde 2<=b<=10. Esta rutina utiliza el hecho de
   que en el juego de caracteres ASCII, los digitos 0 a 9
   tienen valores de código secuenciales.
 */

printn(n,b) {
        extern putchar;
        auto a;

        if(a=n/b) /* asignación, no comprobación de igualdad */
                printn(a, b); /* recursivo */
        putchar(n%b + '0');
}

Este programa de ejemplo en B utiliza la función anterior para sumar tres números imprimiendo por pantalla el resultado.

main( ) {
  extern printn;
  auto a, b, c, sum;

  a = 1; b = 2; c = 3;
  sum = a+b+c;
  printn(sum,10);
}

Enlaces externos

[editar]