stringtranslate.com

B (lenguaje de programación)

B es un lenguaje de programación desarrollado en Bell Labs alrededor de 1969 por Ken Thompson y Dennis Ritchie .

B se derivó de BCPL y su nombre posiblemente sea una contracción de BCPL. El colaborador 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 su uso en Multics . [nota 1]

B fue diseñado para aplicaciones recursivas, no numéricas e independientes de la máquina, como software de sistemas y lenguajes. [3] Era un lenguaje sin tipos, en el que el único tipo de datos era el formato de palabra de memoria natural de la máquina subyacente , cualquiera que fuese. Dependiendo del contexto, la palabra se trataba como un entero o como 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 Bell Labs, el soporte para datos de caracteres almacenados en palabras de memoria se volvió importante. La naturaleza sin tipos del lenguaje se consideró una desventaja, lo que llevó a Thompson y Ritchie a desarrollar una versión ampliada del lenguaje que admitiera nuevos tipos internos y definidos por el usuario, que se convirtió en el lenguaje de programación C.

Historia

Semántica BCPL con mucha sintaxis SMALGOL

—  Ken Thompson, [4]

Hacia 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 creyera que podía prescindir para que encajara en la capacidad de memoria de las minicomputadoras de la época. La transición de BCPL a B también incluyó cambios realizados para adaptarse a las preferencias de Thompson (principalmente en la línea de reducir la cantidad 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 :=volvió al =de Superplan de Rutishauser y el operador de igualdad fue reemplazado por .===

Thompson añadió "operadores de asignación de dos direcciones" utilizando x =+ yla sintaxis para sumar y a x (en C el operador se escribe +=). Esta sintaxis proviene 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 a partir de la sintaxis de ALGOL 68 ). [2] [5] Thompson fue más allá al inventar los operadores de incremento y decremento ( y ). Su posición de prefijo o posfijo 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 incremento y decremento automáticos del DEC PDP-11, pero esto es históricamente imposible ya que la máquina no existía cuando B se desarrolló por primera vez. [2]x +:= y++--

La versión con punto y coma del bucle for fue tomada prestada por Ken Thompson del trabajo de Stephen Johnson . [6]

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 +, -, *, /) lo trataban como un entero, pero otros lo trataban como una dirección de memoria a la que se debía desreferenciar . En muchos otros aspectos se parecía mucho a una versión temprana de C. Hay algunas funciones de biblioteca, incluidas algunas que se parecen vagamente a las funciones de la biblioteca de E/S estándar en C. [3] En palabras de Thompson: "B y el viejo C eran lenguajes muy similares, excepto por todos los tipos [en C]". [6]

Las primeras implementaciones fueron para las minicomputadoras DEC PDP-7 y PDP-11 que usaban los primeros Unix y para los mainframes Honeywell GE 645 [7] de 36 bits que ejecutaban el sistema operativo GCOS . Las primeras implementaciones de PDP-7 compilaban en código enhebrado y Ritchie escribió un compilador usando TMG que producía código de máquina. [8] [9] [10] En 1970 se adquirió un PDP-11 y se usó 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. Una versión temprana de yacc se produjo con esta configuración PDP-11. Ritchie se hizo cargo del mantenimiento durante este período. [2] [10]

La naturaleza sin tipos de B tenía sentido en Honeywell, PDP-7 y muchas computadoras más antiguas, pero era un problema en PDP-11 porque era difícil acceder de manera elegante al tipo de datos de caracteres que 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, en particular agregando tipos de datos para variables. Durante 1971 y 1972, B evolucionó a "New B" (NB) y luego a C. [2]

B está casi extinto, habiendo sido reemplazado por el lenguaje C. [ 11] Sin embargo, continúa viéndose usado en mainframes GCOS (a partir de 2014 ) [12] y en ciertos sistemas integrados (a partir de 2000 ) 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. [11] El altamente influyente AberMUD fue escrito originalmente en B.

Ejemplos

Los siguientes ejemplos son de la Referencia de los usuarios a B de Ken Thompson: [3]

/* 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 ANSCII, los dígitos del 0 al 9 tienen valores de código secuencial  . */printn ( n , b ) { extrn putchar ; auto a ; /* Nota de Wikipedia: la palabra clave auto declara una variable con  almacenamiento automático (la duración es el alcance de la función), no  "tipificación 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 hasta aproximadamente  4000 dígitos decimales y la imprimirá 50 caracteres por 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, ... */principal () { extrn putchar , n , v ; auto i , c , col , a ;           i = col = 0 ; mientras que ( i < n ) v [ i ++ ] = 1 ;         mientras ( col < 2 * n ) { a = n + 1 ; c = i = 0 ; mientras ( i < n ) { c = + v [ i ] * 10 ; v [ i ++ ] = c % a ; c =/ a -- ; } putchar ( c + '0' ); si ( ! ( ++ col % 5 )) putchar ( col % 50 ? ' ' : ' * n ' ); } putchar ( ' * n * n ' ); }                          y [ 2000 ] ; 

Notas

  1. ^ "Su nombre probablemente representa una contracción de BCPL, aunque una teoría alternativa sostiene que deriva de Bon [Thompson 69], un lenguaje no relacionado creado por Thompson durante la época de Multics. Bon, a su vez, recibió su nombre en honor a su esposa Bonnie o (según una cita de una enciclopedia en su manual), en honor a una religión cuyos rituales implican el murmullo de fórmulas mágicas". [2]

Referencias

  1. ^ "B - lenguaje de programación informática".
  2. ^ abcdefg Ritchie, Dennis M. (marzo de 1993). "El desarrollo del lenguaje C". Avisos SIGPLAN de ACM . 28 (3): 201–208. doi : 10.1145/155360.155580 .
  3. ^ abcd Thompson, Ken (7 de enero de 1972). «Referencia de los usuarios a B» (PDF) . Bell Laboratories. Archivado desde el original (PDF) el 17 de marzo de 2015 . Consultado el 21 de marzo de 2014 .
  4. ^ Jensen, Richard (9 de diciembre de 2020). ""Una cosa muy estúpida de hacer"—los orígenes de C". Ars Technica . Consultado el 28 de marzo de 2022 .
  5. ^ Michael S. Mahoney (18 de agosto de 1989). "Entrevista con MD McIlroy". Princeton.edu . Murray Hill.
  6. ^ de Ken Thompson. "VCF East 2019: Brian Kernighan entrevista a Ken Thompson". YouTube . Archivado desde el original el 23 de noviembre de 2021. Consultado el 16 de noviembre de 2020. Vi la versión de Johnson con punto y coma del bucle for y la puse en [B], la robé.
  7. ^ 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 desde el original el 11 de junio de 2015.
  8. ^ "TMG". multicians.org.
  9. ^ Ritchie, Dennis M. "El desarrollo del lenguaje C". Bell Labs/Lucent Technologies. Archivado desde el original el 11 de junio de 2015.
  10. ^ ab McIlroy, MD (1987). Un lector de Unix para investigación: extractos anotados del Manual del programador, 1971–1986 (PDF) (Informe técnico). CSTR. Bell Labs. 139. Archivado (PDF) desde el original el 9 de octubre de 2022.
  11. ^ ab Johnson y Kernighan . "EL LENGUAJE DE PROGRAMACIÓN B". Bell Laboratories. Archivado desde el original el 11 de junio de 2015. Consultado el 21 de marzo de 2014 .
  12. ^ "Paquete de herramientas Thinkage UW". Thinkage, Ltd. Consultado el 26 de marzo de 2014 .

Enlaces externos