B es un lenguaje de programación desarrollado en Bell Labs alrededor de 1969 por Ken Thompson y Dennis Ritchie .
B fue diseñado para aplicaciones recursivas, no numéricas e independientes de la máquina, como software de sistema y lenguaje. [ 2 ] Era un lenguaje sin tipos, donde el único tipo de dato era el formato de palabra de memoria natural de la máquina subyacente , cualquiera que fuera. Dependiendo del contexto, la palabra se trataba como un entero o una dirección de memoria .
A medida que las máquinas con procesamiento ASCII se hicieron comunes, en particular la DEC PDP-11 que llegó a los Laboratorios Bell, el soporte para datos de caracteres almacenados en palabras de memoria se volvió importante. La naturaleza sin tipado del lenguaje se consideró una desventaja, lo que llevó a Thompson y Ritchie a desarrollar una versión ampliada del lenguaje que admitía nuevos tipos internos y definidos por el usuario, lo que se convirtió en el omnipresente lenguaje de programación C.
Historia
Semántica BCPL con mucha sintaxis SMALGOL
— Ken Thompson, [ 3 ]
Ken Thompson comenzó a desarrollar B como un compilador de Fortran para el PDP-7 , pero descubrió que su implementación inicial superaba con creces la memoria disponible. Tras varias iteraciones de simplificación del compilador y adaptación del lenguaje a sus propios gustos, influenciados por BCPL , llegó a un lenguaje que expresaba un subconjunto de la semántica de BCPL con una sintaxis distinta. Thompson denominó al lenguaje B, lo que se ha explicado de diversas maneras como una abreviatura de BCPL o Bon, otro lenguaje que había desarrollado, aunque él no confirmó ninguna de las dos explicaciones. [ 4 ] [ 5 ]
Thompson añadió "operadores de asignación de dos direcciones" usando x =+ yla sintaxis para sumar y a x (en C el operador se escribe +=). Esta sintaxis provino de la implementación de TMG de Douglas McIlroy , en la que se implementó por primera vez el compilador de B (y llegó a TMG desde la sintaxis de ALGOL 68 ). [ 4 ] [ 6 ] Thompson fue más allá al inventar los operadores de incremento y decremento ( y ). Su posición de prefijo o postfijo determina si el valor se toma antes o después de la alteración del operando. Esta innovación no estaba en las primeras versiones de B. Según Dennis Ritchie, la gente a menudo asumía que se crearon para los modos de dirección de autoincremento y autodecremento del DEC PDP-11, pero esto es históricamente imposible ya que la máquina no existía cuando se desarrolló B por primera vez. [ 4 ]x +:= y++--
B no tiene tipo, o más precisamente tiene un tipo de dato: la palabra de computadora. La mayoría de los operadores (por ejemplo +, , -, *, /) lo trataban como un entero, pero otros lo trataban como una dirección de memoria que se desreferenciaba . En muchos otros aspectos se parecía mucho a una versión temprana de C. Incluía un bucle for generalizado como el que apareció más tarde en C, que Thompson adaptó de un trabajo anterior de Stephen Johnson . [ 5 ] Hay algunas funciones de biblioteca, incluidas algunas que se parecen vagamente a funciones de la biblioteca de E/S estándar en C. [ 2 ] En palabras de Thompson: "B y el antiguo C eran lenguajes muy, muy similares excepto por todos los tipos [en C]". [ 5 ]
Las primeras implementaciones fueron para las minicomputadoras DEC PDP-7 y PDP-11 que usaban Unix temprano , y mainframes Honeywell GE 645 [ 7 ] de 36 bits que ejecutaban el sistema operativo GCOS . Las primeras implementaciones de PDP-7 compilaban a código multihilo , y Ritchie escribió un compilador usando TMG que producía código máquina. [ 8 ] [ 9 ] [ 10 ] En 1970 se adquirió un PDP-11 y se usó código multihilo para el puerto; un ensamblador,corriente continuay el propio lenguaje B fueron escritos en B para arrancar la computadora. Una versión temprana de yacc se produjo con esta configuración PDP-11. Ritchie se hizo cargo del mantenimiento durante este período. [ 4 ] [ 10 ]
La naturaleza sin tipado de B tenía sentido en el Honeywell, el PDP-7 y muchos ordenadores antiguos, pero era un problema en el PDP-11 porque era difícil acceder elegantemente al tipo de datos de caracteres que el PDP-11 y la mayoría de los ordenadores modernos soportan completamente. A partir de 1971, Ritchie introdujo cambios en el lenguaje mientras convertía su compilador para producir código máquina, sobre todo añadiendo tipado de datos para las variables. Durante 1971 y 1972, B evolucionó a "New B" (NB) y luego a C. [ 4 ]
B está casi extinto, habiendo sido reemplazado por el lenguaje C. [ 11 ] Sin embargo, continúa usándose en mainframes GCOS ( a partir de 2014) [ 12 ] y en ciertos sistemas embebidos ( a partir de 2000) por diversas razones: hardware limitado en sistemas pequeños, bibliotecas extensas, herramientas, problemas de costos de licencias y simplemente ser lo suficientemente bueno para el trabajo. [ 11 ] El muy influyente AberMUD fue escrito originalmente en B.
Ejemplos
Los siguientes ejemplos provienen de la Referencia de usuarios de B de Ken Thompson: [ 2 ]
/* La siguiente función imprimirá un número no negativo, n, en base b, donde 2<=b<=10. Esta rutina utiliza el hecho de que, en el conjunto de caracteres ASCII, los dígitos del 0 al 9 tienen valores de código secuenciales . */printn ( n , b ) { extrn putchar ; auto a ; /* Nota de Wikipedia: la palabra clave auto declara una variable con almacenamiento automático (su vida útil es el ámbito de la función), no con "tipado automático" como en C++11 y C23 */if ( a = n / b ) /* asignación, no prueba de igualdad */ printn ( a , b ); /* recursivo */ putchar ( n % b + '0' ); }/* El siguiente programa calculará la constante e⁻² con aproximadamente 4000 dígitos decimales y la imprimirá en grupos de 5 caracteres, ocupando 50 caracteres por línea. El método consiste en una simple conversión de salida de la expansión 1/2! + 1/3! + ... = 0.111... donde las bases de los dígitos son 2, 3, 4, ... */main () { extrn putchar , n , v ; auto i , c , col , a ;i = col = 0 ; mientras ( i < n ) v [ i ++ ] = 1 ;while ( col < 2 * n ) { a = n + 1 ; c = i = 0 ; while ( i < n ) { c =+ v [ i ] * 10 ; v [ i ++ ] = c % a ; c =/ a -- ; } putchar ( c + '0' ); if ( ! ( ++ col % 5 )) putchar ( col % 50 ? ' ' : ' * n ' ); } putchar ( ' * n * n ' ); }v [ 2000 ]; n 2000 ;Referencias
- ↑ "B - lenguaje de programación de computadoras" . Enciclopedia Británica .
- 1 2 3 Thompson, Ken (7 de enero de 1972). "Referencia de usuarios a B" (PDF) . Bell Laboratories. Archivado del original (PDF) el 17 de marzo de 2015. Recuperado el 21 de marzo de 2014 .
- ^ Jensen, Richard (9 de diciembre de 2020). ""Una estupidez mayúscula"—los orígenes de C" . Ars Technica . Consultado el 28 de marzo de 2022 .
- 1 2 3 4 5 Ritchie, Dennis M. (marzo de 1993). "El desarrollo del lenguaje C" . ACM SIGPLAN Notices . 28 (3): 201– 208. doi : 10.1145/155360.155580 .
- 1 2 3 "VCF East: Entrevista a Ken Thompson realizada por Brian Kernighan" . YouTube . 6 de mayo de 2019.41:07
- ↑ Michael S. Mahoney (18 de agosto de 1989). "Entrevista con MD McIlroy" . Princeton.edu . Murray Hill.
- ↑ Ritchie, Dennis M. (1984). "La evolución del sistema de tiempo compartido Unix" . AT&T Bell Laboratories Technical Journal . 63 (6 Parte 2): 1577–1593 . doi : 10.1002/j.1538-7305.1984.tb00054.x . Archivado del original el 11 de junio de 2015.
- ↑ "TMG" . multicians.org.
- ↑ Ritchie, Dennis M. "El desarrollo del lenguaje C" . Bell Labs/Lucent Technologies. Archivado del original el 11 de junio de 2015.
- 1 2 McIlroy, MD (1987). Un lector de Research Unix: extractos anotados del Manual del programador, 1971–1986 (PDF) (Informe técnico). CSTR. Bell Labs. 139. Archivado (PDF) del original el 09/10/2022.
- 1 2 Johnson y Kernighan . "EL LENGUAJE DE PROGRAMACIÓN B" . Bell Laboratories. Archivado del original el 11 de junio de 2015. Recuperado el 21 de marzo de 2014 .
- ^ "Paquete de herramientas Thinkage UW" . Thinkage, Ltd. Consultado el 26 de marzo de 2014 .
Enlaces externos
- Página del manual para b(1) de Unix First Edition
- El desarrollo del lenguaje C , Dennis M. Ritchie . Sitúa B en el contexto de BCPL y C.
- Referencia para usuarios de B , Ken Thompson. Describe la versión para PDP-11 .
- El lenguaje de programación B , SC Johnson y BW Kernighan, Informe técnico CS TR 8, Bell Labs (enero de 1973). La versión GCOS en equipos Honeywell .
- Manual de referencia del lenguaje B , Thinkage Ltd. La versión de producción del lenguaje tal como se usa en GCOS, incluyendo el lenguaje y la biblioteca de tiempo de ejecución.
- Lenguajes de programación procedimental
- Lenguajes de programación
- Lenguajes de programación creados en 1969