B (idioma) | |
Fecha de la primera versión | 1969 |
---|---|
Influenciado por | BCPL |
El B lenguaje de programación es un lenguaje obsoleta que representa la transición de BCPL para el lenguaje C . Es principalmente obra de Ken Thompson y apareció por primera vez alrededor de 1969 .
B era el BCPL privado de todo lo que Thompson pensaba que no era esencial, por lo que podría usarse en computadoras pequeñas y con algunos cambios para adaptarse a los gustos de Thompson (principalmente reduciendo la cantidad de caracteres en un programa).
Como BCPL y Forth , B tenía sólo un tipo de datos, a saber, la computadora de "palabra" ( palabra ). La mayoría de los operadores (+, -, *, /) vieron la palabra como un número entero, mientras que otros la vieron como una dirección de memoria. En otros aspectos, B puede verse como una versión primitiva de C. Existían algunas bibliotecas de funciones, algunas de las cuales se parecían vagamente a las funciones de E / S de la biblioteca C estándar .
Las primeras implementaciones fueron para miniordenadores DEC , PDP-7 y PDP-11 y se desarrollaron al mismo tiempo que UNIX .
El lenguaje B fue implementado en las computadoras de la serie Honeywell 6000 y sus sucesoras ( mainframes ) por un equipo de la Universidad de Waterloo, Ontario, Canadá, para poder escribir un sustituto para el tiempo compartido de estas máquinas. Comandos UNIX llamado UW-Tools . Bull distribuyó gratuitamente el compilador B y UW-Tools en Francia hasta aproximadamente el año 2000.
Según Ken Thompson, la B fue muy influenciada por BCPL, pero el nombre B en sí no tiene nada que ver con eso: fue una evolución de un idioma antiguo, Bon , llamado así por la esposa de Ken, Thompson, llamado Bonnie.
El siguiente ejemplo está tomado de la referencia de usuario en lenguaje B escrita por Ken Thompson
/* 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; if(a=n/b) /* assignment, not test for equality */ printn(a, b); /* recursive */ putchar(n%b + '0'); }