stringtranslate.com

BCP

BCPL ( Basic Combined Programming Language ) es un lenguaje de programación procedimental , imperativo y estructurado . Originalmente pensado para escribir compiladores para otros lenguajes, BCPL ya no se usa comúnmente. Sin embargo, su influencia aún se siente porque una versión simplificada y modificada sintácticamente de BCPL, llamada B , fue el lenguaje en el que se basó el lenguaje de programación C. BCPL introdujo varias características de muchos lenguajes de programación modernos, incluido el uso de llaves para delimitar bloques de código. [3] BCPL fue implementado por primera vez por Martin Richards de la Universidad de Cambridge en 1967. [1]

Diseño

BCPL fue diseñado para que se pudieran escribir compiladores pequeños y simples para él; se dice que algunos compiladores podían ejecutarse en 16 kilobytes . Además, el compilador original, escrito en BCPL, era fácilmente portable. Por lo tanto, BCPL era una opción popular para arrancar un sistema. [ cita requerida ] Una razón importante para la portabilidad del compilador radicaba en su estructura. Se dividió en dos partes: el frontend analizaba el código fuente y generaba O-code, un lenguaje intermedio . El backend tomaba el O-code y lo traducía al código de máquina para la máquina de destino. Solo era necesario reescribir 15 del código del compilador para admitir una nueva máquina, una tarea que generalmente requería entre 2 y 5 meses-persona . Este enfoque se convirtió en una práctica común más tarde (por ejemplo, Pascal , Java ).

El lenguaje es inusual porque tiene un solo tipo de datos : una palabra , un número fijo de bits, generalmente elegidos para alinearse con la palabra de máquina de la arquitectura y con la capacidad adecuada para representar cualquier dirección de almacenamiento válida. Para muchas máquinas de la época, este tipo de datos era una palabra de 16 bits. Esta elección resultó ser un problema importante cuando se utilizó BCPL en máquinas en las que el elemento direccionable más pequeño no era una palabra sino un byte o en máquinas con tamaños de palabra más grandes, como 32 bits o 64 bits. [ cita requerida ]

La interpretación de cualquier valor estaba determinada por los operadores utilizados para procesar los valores. (Por ejemplo, +sumaba dos valores y los trataba como números enteros ; !indirección a través de un valor, tratándolo efectivamente como un puntero). Para que esto funcionara, la implementación no proporcionaba verificación de tipos .

La falta de correspondencia entre la orientación de palabras de BCPL y el hardware orientado a bytes se abordó de varias maneras. Una de ellas fue proporcionar rutinas de biblioteca estándar para empaquetar y desempaquetar palabras en cadenas de bytes. Más tarde, se agregaron dos características del lenguaje: el operador de selección de campo de bits y el operador de indirección de bytes infijos (indicado por %). [4]

BCPL maneja los enlaces que abarcan unidades de compilación separadas de una manera única. No hay variables globales declarables por el usuario; en su lugar, hay un vector global, similar al "blank common" en Fortran . Todos los datos compartidos entre diferentes unidades de compilación comprenden escalares y punteros a vectores almacenados en un lugar preestablecido en el vector global. Por lo tanto, los archivos de encabezado (archivos incluidos durante la compilación utilizando la directiva "GET") se convierten en el medio principal de sincronización de datos globales entre unidades de compilación, que contienen directivas "GLOBAL" que presentan listas de nombres simbólicos, cada uno emparejado con un número que asocia el nombre con la palabra numéricamente direccionada correspondiente en el vector global. Además de las variables, el vector global contiene enlaces para procedimientos externos. Esto hace que la carga dinámica de unidades de compilación sea muy sencilla de lograr. En lugar de depender del cargador de enlaces de la implementación subyacente, efectivamente, BCPL le da al programador el control del proceso de enlace. [ cita requerida ]

El vector global también hizo que fuera muy sencillo reemplazar o ampliar las rutinas de la biblioteca estándar. Un programa podría guardar el puntero del vector global a la rutina original y reemplazarlo con un puntero a una versión alternativa. La alternativa podría llamar al original como parte de su procesamiento. Esto podría usarse como una ayuda rápida para la depuración ad hoc . [ cita requerida ]

BCPL fue el primer lenguaje de programación con llaves , que sobrevivieron a los cambios sintácticos y se han convertido en un medio común para indicar las declaraciones del código fuente del programa. En la práctica, en los limitados teclados de la época, los programas fuente solían utilizar las secuencias $(y $)en lugar de los símbolos {y . Los comentarios} de una sola línea de BCPL, que no fueron adoptados por C , reaparecieron en C++ y más tarde en C99 .//

El libro BCPL: El lenguaje y su compilador describe la filosofía de BCPL de la siguiente manera:

La filosofía de BCPL no es la del tirano que cree saber más y dicta las leyes sobre lo que está permitido y lo que no; más bien, BCPL actúa más como un sirviente que ofrece sus servicios lo mejor que puede sin quejarse, incluso cuando se enfrenta a aparentes tonterías. Siempre se supone que el programador sabe lo que está haciendo y no se ve limitado por restricciones mezquinas. [5]

Historia

El BCPL fue implementado por primera vez por Martin Richards de la Universidad de Cambridge en 1967. [1] El BCPL fue una respuesta a las dificultades con su predecesor, el lenguaje de programación Cambridge, posteriormente renombrado lenguaje de programación combinado (CPL), que fue diseñado a principios de la década de 1960. Richards creó el BCPL "eliminando aquellas características del lenguaje completo que dificultan la compilación". La primera implementación del compilador, para el IBM 7094 bajo el Sistema de tiempo compartido compatible , fue escrita mientras Richards visitaba el Proyecto MAC en el Instituto Tecnológico de Massachusetts en la primavera de 1967. El lenguaje fue descrito por primera vez en un artículo presentado en la Conferencia de Computación Conjunta de Primavera de 1969. [ cita requerida ]

Se rumorea que BCPL originalmente significaba "Bootstrap Cambridge Programming Language", pero CPL nunca se creó porque el desarrollo se detuvo en BCPL y el acrónimo se reinterpretó más tarde para el libro BCPL. [ aclaración necesaria ] [ cita necesaria ]

BCPL es el lenguaje en el que se escribió el programa original "¡Hola, mundo!" . [6] El primer MUD también se escribió en BCPL ( MUD1 ).

Varios sistemas operativos fueron escritos parcial o totalmente en BCPL (por ejemplo, TRIPOS y las primeras versiones de AmigaDOS ). BCPL también fue el lenguaje inicial utilizado en el proyecto Xerox PARC Alto . Entre otros proyectos, el sistema de preparación de documentos Bravo fue escrito en BCPL.

Un compilador temprano, iniciado en 1969, partiendo de una cinta de papel del código O del compilador Atlas 2 de Richards , estaba destinado a la serie ICT 1900. Las dos máquinas tenían longitudes de palabra diferentes (48 frente a 24 bits), codificaciones de caracteres diferentes y representaciones de cadenas empaquetadas diferentes, y el exitoso inicio aumentó la confianza en la viabilidad del método.

A finales de 1970, existían implementaciones para Honeywell 635 y Honeywell 645 , IBM 360 , PDP-10 , TX-2 , CDC 6400 , UNIVAC 1108 , PDP-9 , KDF 9 y Atlas 2. En 1974, se implementó un dialecto de BCPL en BBN sin utilizar el código O intermedio. La implementación inicial fue un compilador cruzado alojado en los PDP-10 TENEX de BBN y apuntaba directamente a los PDP-11 utilizados en la implementación de BBN de los IMP de segunda generación utilizados en ARPANET .

También hubo una versión producida para la BBC Micro a mediados de la década de 1980, por Richards Computer Products, una empresa fundada por John Richards, el hermano de Martin Richards. [7] El Proyecto Domesday de la BBC hizo uso del lenguaje. Versiones de BCPL para las computadoras Amstrad CPC y Amstrad PCW también fueron lanzadas en 1986 por la empresa de software británica Arnor Ltd. MacBCPL fue lanzado para Apple Macintosh en 1985 por Topexpress Ltd, de Kensington, Inglaterra.

Tanto el diseño como la filosofía de BCPL influyeron fuertemente en B , que a su vez influyó en C. [8] Los programadores de la época debatían si un eventual sucesor de C se llamaría "D", la siguiente letra del alfabeto, o "P", la siguiente letra del nombre del lenguaje padre. El lenguaje más aceptado como sucesor de C es C++ ( siendo el operador de incremento++ de C ), [9] aunque, mientras tanto, también existe un lenguaje de programación D.

En 1979, existían implementaciones de BCPL para al menos 25 arquitecturas; el lenguaje gradualmente cayó en desgracia a medida que C se hizo popular en sistemas no Unix.

Martin Richards mantiene una versión moderna de BCPL en su sitio web, actualizada por última vez en 2023. [10] Puede configurarse para ejecutarse en varios sistemas, incluidos Linux, FreeBSD y Mac OS X. La última distribución incluye bibliotecas de gráficos y sonido, y hay un manual completo. Sigue programando en él, incluso para su investigación sobre partituras musicales automatizadas después de .

Un tipo MIME informal común para BCPL es text/x-bcpl .

Ejemplos

Hola Mundo

Richards y Whitby-Strevens [11] proporcionan un ejemplo del programa "¡Hola, mundo!" para BCPL utilizando un encabezado de sistema estándar, 'LIBHDR':

OBTENER "LIBHDR"DEJE QUE INICIE() SEA WRITES("Hola, mundo")

Más ejemplos

Si estos programas se ejecutan utilizando la versión actual de Cintsys de Richards (diciembre de 2018), LIBHDR, START y WRITEF deben cambiarse a minúsculas para evitar errores.

Factoriales de impresión:

OBTENER "LIBHDR"DEJE QUE INICIE() = VALOF $(PARA I = 1 A 5 HACERESCRIBIR("%N! = %I4*N", I, HECHO(I))RESULTADOS 0$)Y HECHO(N) = N = 0 -> 1, N * HECHO(N - 1)

Cuente las soluciones al problema de N reinas :

OBTENER "LIBHDR"$ GLOBAL (CONTAR: 200TODOS: 201$)DEJE QUE INTENTE (LD, ROW, RD) SEAFILA DE PRUEBA = TODAS ENTONCESCONTAR := CONTAR + 1DE LO CONTRARIO $(DEJE POSS = TODOS y ~(LD | FILA | RD)HASTA POSS = 0 HACER $(SEA P = POSS y -POSSPOSESIÓN := POSESIÓN - PINTENTAR(LD + P << 1, FILA + P, RD + P >> 1)$)$)DEJE QUE INICIE() = VALOF $(TODOS := 1PARA I = 1 A 12 HACER $(CONTAR := 0INTENTAR(0, 0, 0)WRITEF("EL PROBLEMA DE %I2-QUEENS TIENE %I5 SOLUCIONES*N", I, CONTAR)TODOS := 2 * TODOS + 1$)RESULTADOS 0$)

Referencias

  1. ^ abc «Martin Richards (Premio pionero de la informática 2003)». IEEE Computer Society. Archivado desde el original el 24 de noviembre de 2017. Consultado el 24 de noviembre de 2017 .
  2. ^ Pike, Rob (24 de abril de 2014). "Hello Gophers" (Hola, topos) . Consultado el 11 de marzo de 2016 .
  3. ^ https://www.cl.cam.ac.uk/~mr10/bcplman.pdf Guía del usuario de BCPL Cintsys y Cintpos, 2.1.4 Corchetes de sección
  4. ^ "Clive Feather sobre CPL y BCPL". www.lysator.liu.se . Consultado el 1 de marzo de 2024 .
  5. ^ Richards, Martin; Whitby-Strevens, Colin (1980). BCPL: El lenguaje y su compilador . Cambridge University Press. pág. 5. ISBN. 978-0521785433.
  6. ^ BCPL, Archivo de jerga
  7. ^ "Desarrollo técnico de Reuters: Glosario - THE BARON". www.thebaron.info .
  8. ^ Kernighan, Brian W.; Dennis M. Ritchie (1978). El lenguaje de programación C. Bell Telephone Laboratories. pág. 2. ISBN 0-13-110163-3.
  9. ^ Historia de C++ Recuperado el 12 de diciembre de 2017
  10. ^ Martin Richards. "BCPL/README (distribución de BCPL Cintcode)".
  11. ^ Richards, Martin; Whitby-Strevens, Colin (1980). BCPL: El lenguaje y su compilador . Cambridge University Press. pág. 8. ISBN. 978-0521785433.

Lectura adicional

Enlaces externos