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 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 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, 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 trataba 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 Labs, la compatibilidad con 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 admitía 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]

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 que Thompson creyera que podía prescindir para adaptarlo a 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 el sentido 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 tipo ALGOL de BCPL sufrió cambios considerables en este proceso. El operador de asignación volvió:= al Superplan de =Rutishauser y el operador de igualdad fue reemplazado por .===

Thompson agregó "operadores de asignación de dos direcciones" usando x =+ ysintaxis para agregar 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 ). [2] [5] 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 modificació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 creados para los modos de dirección de incremento y decremento automático del DEC PDP-11, pero esto es históricamente imposible ya que la máquina no No existía 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 . [6]

B no tiene tipo, o más precisamente tiene un tipo de datos: la palabra informática. La mayoría de los operadores (por ejemplo +, -, *, /) trataron esto como un número entero, pero otros lo trataron como una dirección de memoria a la que se debe desreferenciar . En muchos otros aspectos se parecía mucho a una versión anterior de C. Hay algunas funciones de biblioteca, incluidas algunas que se parecen vagamente a funciones de la biblioteca de E/S estándar en C. [3] En palabras de Thompson: "B y el antiguo El antiguo 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 Unix temprano y mainframes Honeywell GE 645 [7] de 36 bits que ejecutaban el sistema operativo GCOS . Las primeras implementaciones de PDP-7 se compilaron en código subproceso , 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 utilizó código de subprocesos para el puerto; un ensamblador,corriente continua, y el lenguaje B en sí se escribieron en B para arrancar la computadora. Se produjo una primera versión de yacc con esta configuración de PDP-11. Ritchie se hizo cargo del mantenimiento durante este período. [2] [10]

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 elegantemente al tipo de datos de caracteres que la PDP-11 y la mayoría de las computadoras modernas soportan 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 tipificación de datos para variables. Durante 1971 y 1972 B evolucionó a "Nueva B" (NB) y luego a C. [2]

B está casi extinto, habiendo sido reemplazado por el lenguaje C. [11] Sin embargo, se sigue utilizando en mainframes del SMOC (a partir de 2014 ) [12] y en ciertos sistemas integrados (a partir de 2000 ) por diversas razones: hardware limitado en sistemas pequeños, bibliotecas extensas, herramientas, costo de licencia problemas y simplemente ser lo suficientemente bueno para el trabajo. [11] El muy influyente AberMUD fue escrito originalmente en B.

Ejemplos

Los siguientes ejemplos son de Users' Reference to 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 aprovecha el hecho de que  en el juego 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 (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 con aproximadamente  4000 dígitos decimales y la imprimirá 50 caracteres por línea en  grupos de 5 caracteres. ¡El método es una simple conversión de salida  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 ;        yo = col = 0 ; mientras ( i < n ) v [ i ++ ] = 1 ; mientras ( col < 2 * n ) { a = n + 1 ; c = yo = 0 ; mientras ( 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 ' ); } en [ 2000 ]; n 2000 ;  

Ver también

icono portal de programación informática

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 los días de Multics. Bon, a su vez, recibió el 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

  1. ^ "B - lenguaje de programación informática".
  2. ^ abcdefg Ritchie, Dennis M. (marzo de 1993). "El desarrollo del lenguaje C". Avisos ACM SIGPLAN . 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) . Laboratorios Bell. 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 ": los orígenes de C". Ars Técnica . Consultado el 28 de marzo de 2022 .
  5. ^ Michael S. Mahoney (18 de agosto de 1989). "Entrevista con el médico McIlroy". Princeton.edu . Murray Hill.
  6. ^ ab 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 punto y coma de Johnson del bucle for y la puse en [B], la robé.
  7. ^ 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. 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". Laboratorios Bell/Tecnologías Lucent. Archivado desde el original el 11 de junio de 2015.
  10. ^ ab McIlroy, MD (1987). Un lector de Research Unix: extractos comentados del Manual del programador, 1971-1986 (PDF) (Informe técnico). CSTR. Laboratorios Bell. 139. Archivado (PDF) desde el original el 9 de octubre de 2022.
  11. ^ ab 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 .
  12. ^ "Paquete de herramientas Thinkage UW". Thinkage, Ltd. Consultado el 26 de marzo de 2014 .

enlaces externos