B es un lenguaje de programación desarrollado en Bell Labs alrededor de 1969. Fue desarrollado por Ken Thompson y Dennis Ritchie .
Diseñada por | Ken Thompson |
---|---|
Desarrollador | Ken Thompson , Dennis Ritchie |
Apareció por primera vez | 1969 [1] |
Disciplina de mecanografía | sin tipo (todo es una palabra ) |
Extensiones de nombre de archivo | .B |
Influenciado por | |
BCPL , PL / I , TMG | |
Influenciado | |
C |
B se deriva de BCPL y su nombre posiblemente sea una contracción de BCPL. El compañero de trabajo de Thompson, Dennis Ritchie, especuló que el nombre podría estar basado en Bon, un lenguaje de programación anterior, pero no relacionado, que Thompson diseñó para usar en Multics . [nota 1]
B fue diseñado para aplicaciones recursivas, no numéricas e independientes de la máquina, como software de sistema y lenguaje. [3] Era un lenguaje sin tipos, y el único tipo de datos era el formato de palabra de memoria natural de la máquina subyacente , cualquiera que fuera. Dependiendo del contexto, la palabra se trató como un número entero o como una dirección de memoria .
A medida que las máquinas con procesamiento ASCII se volvieron comunes, en particular el DEC PDP-11 que llegó a Bell, el soporte para datos de caracteres almacenados en palabras de memoria se volvió importante. La naturaleza sin tipo de la lengua fue visto como una desventaja, que llevó Thompson y Ritchie para desarrollar una versión ampliada de la lengua de soporte nuevos tipos internos y definidos por el usuario, que se convirtió en el lenguaje de programación C .
Historia
Alrededor de 1969, Ken Thompson [2] y más tarde Dennis Ritchie [3] desarrollaron B basándose principalmente en el lenguaje BCPL que Thompson utilizó en el proyecto Multics . B era esencialmente el sistema BCPL despojado de cualquier componente del que Thompson pensó que podía prescindir para que encajara dentro de la capacidad de memoria de las miniordenadores de la época. La transición de BCPL a B también incluyó cambios hechos para adaptarse a las preferencias de Thompson (principalmente en la línea de reducir el número de caracteres que no son espacios en blanco en un programa típico). [2] Gran parte de la sintaxis típica de BCPL similar a ALGOL se modificó bastante en este proceso. El operador de asignación :=
cambió a =
y el operador de igualdad =
fue reemplazado por ==
.
Thompson agregó "operadores de asignación de dos direcciones" usando la x =+ y
sintaxis para sumar y a x (en C se escribe el operador +=
). Esta sintaxis provino de la implementación de TMG de Douglas McIlroy , en la cual se implementó por primera vez el compilador de B (y llegó a TMG a partir de la sintaxis de ALGOL 68 ). [2] [4] Thompson fue más allá al inventar los operadores de incremento y decremento ( y ). Su posición de prefijo o sufijo 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 fueron creadas para los modos de dirección de auto-incremento y auto-decremento del DEC PDP-11, pero esto es históricamente imposible ya que la máquina no lo hizo. no existe cuando B se desarrolló por primera vez. [2]x +:= y
++
--
Ken Thompson tomó prestada la versión de punto y coma del bucle for del trabajo de Stephen Johnson . [5]
B no tiene tipo, o más precisamente tiene un tipo de datos: la palabra de computadora. La mayoría de los operadores (por ejemplo +
, -
, *
, /
) tratados de esta como un entero, pero otros trataron como una dirección de memoria que se eliminan las referencias . En muchos otros aspectos, se parecía mucho a una versión anterior de C. Hay algunas funciones de biblioteca, incluidas algunas que se asemejan vagamente a funciones de la biblioteca de E / S estándar en C. [3] En palabras de Thompson: "B y el viejo los viejos C eran lenguajes 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 los primeros Unix , y los mainframes Honeywell GE 645 [6] de 36 bits que ejecutan el sistema operativo GCOS . Las primeras implementaciones de PDP-7 se compilaron en código enhebrado , y Ritchie escribió un compilador usando TMG que produjo código de máquina. [7] [8] [9] En 1970 se adquirió un PDP-11 y se utilizó un código enhebrado para el puerto; un ensamblador,corriente continua, y el lenguaje B en sí mismo se escribieron en B para arrancar la computadora. Se produjo una versión anterior de yacc con esta configuración de PDP-11. Ritchie se hizo cargo del mantenimiento durante este período. [2] [9]
La naturaleza sin tipo de B tenía sentido en Honeywell, PDP-7 y muchas computadoras más antiguas, pero era un problema en la PDP-11 porque era difícil acceder con elegancia al tipo de datos de caracteres que la PDP-11 y la mayoría de las computadoras modernas admiten por completo . A partir de 1971, Ritchie realizó cambios en el lenguaje mientras convertía su compilador para producir código de máquina, sobre todo agregando la escritura de datos para las variables. Durante 1971 y 1972 B evolucionó a "New B" (NB) y luego C. [2]
B está casi extinguida, después de haber sido reemplazado por el lenguaje C . [10] Sin embargo, sigue utilizándose en mainframes del SMOC (a partir de 2014[actualizar]) [11] y en determinados sistemas integrados (a partir de 2000[actualizar]) por una variedad de razones: hardware limitado en sistemas pequeños, bibliotecas extensas, herramientas, problemas de costos de licencia y simplemente ser lo suficientemente bueno para el trabajo. [10] El muy influyente AberMUD se escribió originalmente en B.
Ejemplos de
Los siguientes ejemplos son de la Referencia de usuarios a B de Ken Thompson: [3]
/ * La siguiente función imprimirá un número no negativo, n, en la base b, donde 2 <= b <= 10. Esta rutina utiliza el hecho de que en el juego de caracteres ASCII, los dígitos del 0 al 9 tienen valores de código secuencial . * /printn ( n , b ) { extrn putchar ; auto a ; / * Nota de Wikipedia: auto declara una variable con almacenamiento automático (la vida útil es el alcance de la función), no "escritura automática" como en C ++ 11. * / 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-2 en aproximadamente 4000 dígitos decimales y la imprimirá 50 caracteres en la línea en grupos de 5 caracteres. ¡El método es una conversión de salida simple de la expansión 1/2! + 1/3! + ... = .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 que ( i < n ) v [ i ++ ] = 1 ; while ( col < 2 * n ) { a = n + 1 ; c = i = 0 ; mientras que ( 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 ;
Ver también
Portal de programación informática
Notas
- ^ "Su nombre probablemente representa una contracción de BCPL, aunque una teoría alternativa sostiene que se deriva de Bon [Thompson 69], un lenguaje no relacionado creado por Thompson durante los días de Multics. Bon, a su vez, recibió su nombre de su esposa Bonnie o ( según una cita de la enciclopedia en su manual), después de una religión cuyos rituales implican el murmullo de fórmulas mágicas ". [2]
Referencias
- ^ "B - lenguaje de programación de computadoras" .
- ^ a b c d e f g Ritchie, Dennis M. (marzo de 1993). "El desarrollo del lenguaje C" . Avisos ACM SIGPLAN . 28 (3): 201-208. doi : 10.1145 / 155360.155580 .
- ^ a b c d Thompson, Ken (7 de enero de 1972). "Referencia de los usuarios a B" (PDF) . Laboratorios Bell. Archivado desde el original (PDF) el 17 de marzo de 2015 . Consultado el 21 de marzo de 2014 .
- ^ Michael S. Mahoney (18 de agosto de 1989). "Entrevista con MD McIlroy" . Princeton.edu . Murray Hill.
- ^ a b Ken Thompson. "VCF East 2019 - Brian Kernighan entrevista a Ken Thompson" . Consultado el 16 de noviembre de 2020 .
Vi la versión de punto y coma de Johnson del bucle for y lo puse en [B], lo robé.
- ^ Ritchie, Dennis M. (1984). "La evolución del sistema de tiempo compartido Unix" . Revista técnica de AT&T Bell Laboratories . 63 (6 Parte 2): 1577-1593. Archivado desde el original el 11 de junio de 2015.
- ^ "TMG" . multicians.org.
- ^ Ritchie, Dennis M. "El desarrollo del lenguaje C" . Bell Labs / Lucent Technologies. Archivado desde el original el 11 de junio de 2015.
- ^ a b McIlroy, MD (1987). Un lector de investigación Unix: extractos comentados del Manual del programador, 1971–1986 (PDF) (Informe técnico). CSTR. Bell Labs. 139.
- ^ a b Johnson y Kernighan . "EL LENGUAJE DE PROGRAMACIÓN B" . Laboratorios Bell. Archivado desde el original el 11 de junio de 2015 . Consultado 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 Primera edición
- El desarrollo del lenguaje C , Dennis M. Ritchie . Pone B en el contexto de BCPL y C .
- Referencia de los usuarios a B , Ken Thompson. Describe laversión PDP-11 .
- El lenguaje de programación B , SC Johnson & BW Kernighan, Informe técnico CS TR 8, Bell Labs (enero de 1973). Laversión GCOS enequipos Honeywell .
- B Language Reference Manual , Thinkage Ltd. La versión de producción del idioma que se utiliza en GCOS, incluido el idioma y la biblioteca de tiempo de ejecución.