BLISS es un lenguaje de programación de sistemas desarrollado en la Universidad Carnegie Mellon por WA Wulf , DB Russell y AN Habermann alrededor de 1970. Fue quizás el lenguaje de programación de sistemas más conocido hasta que C hizo su debut unos años más tarde. Desde entonces, C despegó y BLISS se desvaneció en la oscuridad. Cuando C estaba en su infancia, algunos proyectos dentro de Bell Labs debatían los méritos de BLISS vs. C [ cita requerida ] .
Paradigma | Estructurado , imperativo ( procedimental ) |
---|---|
Diseñada por | WA Wulf , DB Russell , AN Habermann |
Desarrollador | Universidad de Carnegie mellon |
Apareció por primera vez | 1970 |
Lanzamiento estable | BLISS-64 |
Disciplina de mecanografía | Sin tipo |
SO | Multiplataforma : PDP-10 , PDP-11 , VAX , PRISM , MIPS , DEC Alpha , Intel IA-32 , Intel IA-64 |
Sitio web | pdp-10 |
Dialectos | |
Felicidad común | |
Influenciado por | |
ALGOL |
BLISS es un lenguaje estructurado en bloques sin tipo basado en expresiones en lugar de declaraciones, e incluye construcciones para manejo de excepciones , corrutinas y macros . No incluye una declaración goto .
Se dice que el nombre es la abreviatura de "Lenguaje básico para la implementación del software del sistema" o "Lenguaje de implementación del software del sistema, al revés". A veces se le llamaba "Lenguaje de Bill para implementar software de sistema", en honor a Bill Wulf.
El compilador Carnegie Mellon original se destacó por su amplio uso de optimizaciones y formó la base del libro clásico The Design of an Optimizing Compiler .
DEC desarrolló y mantuvo compiladores BLISS para PDP-10 , [1] PDP-11 , [1] VAX , [1] DEC PRISM , [2] MIPS , [1] DEC Alpha , [1] e Intel IA-32 , [1] El lenguaje no se hizo popular entre los clientes y pocos tenían el compilador, [3] pero DEC lo usó mucho internamente en la década de 1980; la mayoría de los programas de utilidad para el sistema operativo VMS se escribieron en BLISS-32. Después de la adquisición de DEC, Compaq desarrolló y mantuvo un compilador BLISS para Intel IA-64 . [1]
Descripción del idioma
[ cita excesiva ]
BLISS tiene muchas de las características de otros lenguajes modernos de alto nivel. Tiene una estructura de bloques, una pila automática y mecanismos para definir y llamar rutinas recursivas ... proporciona una variedad de estructuras de datos predefinidas y ... facilidades para probar e iterar ...
Por otro lado, BLISS omite ciertas características de otros lenguajes de alto nivel. No tiene instalaciones integradas para entrada / salida, porque un proyecto de software de sistema generalmente desarrolla su propia entrada / salida o se basa en servicios básicos de gestión de pantalla o E / S de monitor ... permite el acceso a funciones específicas de la máquina, porque el software del sistema a menudo lo requiere. BLISS tiene características que son inusuales entre los lenguajes de alto nivel. Un nombre ... se interpreta uniformemente como la dirección de ese segmento en lugar del valor del segmento ... Además, BLISS es un "lenguaje de expresión" en lugar de un "lenguaje de declaración".
Esto significa que cada construcción del lenguaje que no sea una declaración es una expresión. Las expresiones producen un valor y posiblemente provocan una acción como la modificación del almacenamiento, la transferencia de control o la ejecución de un ciclo de programa. Por ejemplo, la contraparte de una "declaración" de asignación en BLISS es, estrictamente hablando, una expresión que en sí misma tiene un valor. El valor de una expresión se puede usar o descartar en BLISS ... Finalmente, BLISS incluye una función de macro que proporciona un nivel de capacidad que generalmente se encuentra solo en macroensambladores.
- Bliss Language Manual , Digital Equipment Corporation (1987) [4]
El lenguaje BLISS tiene las siguientes características:
- Todas las constantes son palabras completas para la máquina que se está utilizando, por ejemplo, en una máquina de 16 bits como la PDP-11 , una constante es de 16 bits; en una computadora VAX , las constantes son de 32 bits y en un PDP-10 , una constante es de 36 bits.
- Una referencia a una variable es siempre a la dirección de esa variable. Por ejemplo, la instrucción se
Z+8
refiere a sumar 8 a la dirección de Z, no a su valor . Si se necesita sumar 8 al valor de Z, se debe anteponer un punto a la variable; por lo que se escribiría.Z+8
para realizar esta función, que agrega 8 al contenido de Z. - La asignación se realiza con el
=
símbolo estándar , por ejemploZ=8
, que dice crear una constante de palabra completa que contenga 8 y almacenarla en la ubicación cuya dirección corresponde a la de Z. EntoncesZ+12=14
(o, alternativamente12+Z=14
) coloca la constante 14 en la ubicación que es 12 palabras después de la dirección de Z. (Esto se considera una mala práctica). - Las sentencias de bloque son similares a las de ALGOL : un bloque se inicia con una
BEGIN
sentencia y termina conEND
. Al igual que con ALGOL, las declaraciones terminan con punto y coma (";"). Cuando se calcula un valor, se guarda hasta el siguiente terminador de declaración, lo que significa que un valor puede calcularse, asignarse a una variable y trasladarse a la siguiente declaración, si se desea. Alternativamente, se puede usar un paréntesis abierto para comenzar un bloque, con el paréntesis cerrado usado para cerrar el bloque. Cuando se incluyen paréntesis en una expresión, se utilizan las reglas de precedencia estándar , en las que las expresiones entre paréntesis se calculan primero, - La ejecución condicional usa la
IF
expresión, que prueba una condición de verdadero o falso, realiza acciones alternativas y devuelve un resultado. - La comparación utiliza palabras clave como
EQL
igualdad (en lugar de sobrecargar el símbolo = para el mismo propósito),GTR
mayor que yNEQ
no igual. Por ejemplo, el siguiente código asignará el valor absoluto de Z a la dirección indicada por Q:
Q = (IF .Z GTR 0 THEN .Z ELSE -.Z);
- Los identificadores (variables y constantes) deben declararse antes de su uso, normalmente utilizando la
OWN
palabra clave. La declaración de una variable normalmente hace que el compilador le asigne espacio; cuando sea necesario, a una variable se le puede asignar una dirección de máquina fija a través de laBIND
declaración. Esta función se utiliza principalmente para acceder a los registros de la máquina o ciertas direcciones especiales. - Las subrutinas en el lenguaje se denominan rutinas y se declaran con la palabra clave
ROUTINE
. - Las macros , que permiten la sustitución de texto, se declaran con la palabra clave
MACRO
. - El lenguaje admite matrices , que se denominan estructuras y se declaran con la palabra clave
VECTOR
. - El lenguaje admite algunas construcciones de programación de alto nivel como
- Rutas de ejecución alternativas a través de la
CASE
expresión - Bucle mediante el uso de la
INCR
expresión, que es similar a la instrucción FOR de ALGOL - Funciones de cadena integradas
- Ciertas conversiones de datos automáticas (número a cadena, etc.)
- Rutas de ejecución alternativas a través de la
Ejemplo fuente
El siguiente ejemplo está tomado literalmente del Manual de idiomas de Bliss : [4]
MÓDULO E1 (PRINCIPAL = CTRL) =EMPEZARRUTINA ADELANTE CONTROL, PASO;RUTINA CTRL =! +! Esta rutina ingresa un valor, opera sobre él y! luego muestra el resultado.! - EMPEZAR RUTINA EXTERNA GETNUM,! Ingrese un número de la terminal PUTNUM; ! Salida de un número a la terminal LOCAL X, ! Almacenamiento para valor de entrada Y; ! Almacenamiento para valor de salida GETNUM (X); Y = PASO (.X); PUTNUM (.Y) FINAL;PASO DE RUTINA (A) =! +! Esta rutina suma 1 al valor dado.! - (.A + 1);FINALELUDOM
[ cita excesiva ]
Versiones
- BLISS-10
- BLISS-11: un compilador cruzado para el PDP-11
- BLISS-16
- BLISS-16C - Versión DEC de BLISS-11
- BLISS-32
- BLISS-36
- BLISS-64
- Common BLISS - subconjunto portátil
Notas
- ↑ a b c d e f g Brender, Ronald F. (2002). "El lenguaje de programación BLISS: una historia" (PDF) . Software: práctica y experiencia . 32 (10): 955–981. doi : 10.1002 / spe.470 .
- ^ MacLaren, Don (27 de agosto de 1987). "Proyecto, descripción y plan del compilador de DECWest" (PDF) .
- ^ da Cruz, Frank (16 de septiembre de 1987). "Noticias sobre programas de Kermit para VAX / VMS" . Info-Kermit Digest (lista de correo). Proyecto Kermit, Universidad de Columbia . Consultado el 5 de mayo de 2019 .
Kermit-32 está escrito en el lenguaje Bliss, el "lenguaje de implementación corporativa" de DEC (desarrollado originalmente en CMU). Bliss nunca ganó popularidad entre los clientes de DEC; pocos sitios tienen compiladores de Bliss.
- ^ a b Bliss Language Manual , Digital Equipment Corporation (1987)
Referencias
- Wulf, WA; Russell, DB; Habermann, AN (1971). BLISS: Un lenguaje para programación de sistemas . CACM 14 (12): 780-790, diciembre de 1971
- Wulf, WA; Johnson, RK; Weinstock, CB; Hobbs, SO; Geschke, CM (1975). El diseño de un compilador optimizador . Nueva York: Elsevier, ISBN 0-444-00158-1 .
- Brender, Ronald F. (2002). "El lenguaje de programación BLISS: una historia" (PDF) . Software: práctica y experiencia . 32 (10): 955–981. doi : 10.1002 / spe.470 .
enlaces externos
- Manual BLISS en DECUS
- Alan Lehotsky publica sobre BLISS en DEC
- "BLISS: Un lenguaje para la programación de sistemas" por WA Wulf, DB Russell y AN Habermann. (Posdata)
- Notas de la sesión para "Introducción a BLISS" por Matthew D. Madison. (Posdata)
Descargas
- BLISS-10
- BLISS-11
- BLISS-36
- BLISS-11, BLISS-32 y BLISS-64
- FreeVMS Portable BLISS para GCC