JOVIAL es un lenguaje de programación de alto nivel basado en ALGOL 58 , especializado para el desarrollo de sistemas embebidos (sistemas informáticos especializados diseñados para realizar una o varias funciones dedicadas, generalmente embebidos como parte de un dispositivo más grande y completo, incluyendo partes mecánicas). Fue un importante lenguaje de programación de sistemas durante las décadas de 1960 y 1970. [2]
JOVIAL fue desarrollado como un nuevo lenguaje de programación de "orden superior" [3] :1 a partir de 1959 por un equipo de System Development Corporation (SDC) dirigido por Jules Schwartz para componer software para la electrónica de aviones militares. [4]
El nombre JOVIAL es un acrónimo de Jules' Own Version [5] del International Algebraic Language ; International Algorithmic Language (IAL) fue un nombre propuesto originalmente para ALGOL 58. [ 6] Según Schwartz, el lenguaje se llamó originalmente OVIAL , pero hubo oposición por varias razones. Entonces se sugirió JOVIAL , sin ningún significado asociado a J. Un poco en broma, se sugirió que el lenguaje se llamara en honor a Schwartz, ya que él era el presidente de la reunión , y este nombre no oficial se mantuvo. [7]
Durante la década de 1960, JOVIAL formó parte de la serie de proyectos militares L de los EE. UU., en particular el Sistema de control de mando aéreo estratégico ITT 465L (el proyecto del Sistema de mando y control automatizado estratégico (SACCS)), debido a la falta de lenguajes de programación de computación en tiempo real disponibles. Alrededor del 95 por ciento del proyecto SACCS, administrado por International Telephone & Telegraph (ITT) con software escrito principalmente por SDC, se escribió en JOVIAL. El proyecto de software llevó dos años y menos de 1400 años de programación, menos de la mitad del tiempo equivalente en el proyecto L SAGE . [8]
A finales de la década de 1970 y principios de la de 1980, la Fuerza Aérea de los Estados Unidos adoptó una unidad central de procesamiento (CPU) estandarizada, la MIL-STD-1750A , y se crearon programas JOVIAL posteriores para ese procesador. Varios proveedores comerciales proporcionaron compiladores y herramientas de programación relacionadas para crear JOVIAL para procesadores como el MIL-STD-1750A, incluidos Advanced Computer Techniques (ACT), TLD Systems , Proprietary Software Systems (PSS) y otros. [9] [10]
JOVIAL se estandarizó en 1973 con MIL-STD-1589 y se revisó en 1984 con MIL-STD-1589C . Todavía se utiliza para actualizar y mantener el software en vehículos y aeronaves militares más antiguos. Hay tres dialectos de uso común: J3, J3B-2 y J73.
A partir de 2010 [actualizar], JOVIAL ya no es mantenido ni distribuido por la Oficina del Programa JOVIAL de la USAF (JPO). El software que antes distribuía la JPO todavía está disponible a través de recursos comerciales en Software Engineering Associates, Inc., (SEA), al igual que otras combinaciones de procesadores host/destino, incluidos Windows , Linux , Mac OS X en PowerPC , SPARC , VAX , 1750A , PowerPC , TI-9989 , Zilog Z800x , Motorola 680x0 e IBM System 360 , System 370 y System z . Además, DDC-I , que adquirió partes de Advanced Computer Techniques, también incluye compiladores JOVIAL y herramientas relacionadas a partir de abril de 2020. [actualizar][ 2]
La mayor parte del software implementado en JOVIAL es de misión crítica y su mantenimiento es cada vez más difícil. En diciembre de 2014, se informó que el software derivado del código JOVIAL producido en la década de 1960 estuvo involucrado en una falla importante de la infraestructura de control de tráfico aéreo del Reino Unido y que la agencia que lo utiliza, NATS Holdings , tuvo que capacitar a su personal de TI en JOVIAL para que pudieran mantener este software, cuyo reemplazo no estaba programado hasta 2016. [11]
Los lenguajes influenciados por JOVIAL incluyen CORAL , SYMPL , Space Programming Language (SPL) y, en cierta medida, CMS-2 . [12] Un subconjunto interactivo de JOVIAL llamado TINT, similar a JOSS , se desarrolló en la década de 1960. [7]
JOVIAL incluye características que no se encuentran en el ALGOL estándar, como elementos (ahora llamados estructuras ), matrices de elementos, variables de estado (ahora llamadas enumeraciones ) y lenguaje ensamblador en línea . [13]
También se incluyeron disposiciones para datos "empaquetados" dentro de tablas. El empaquetamiento de tablas se refiere a la asignación de elementos dentro de una entrada a palabras de almacenamiento (bits en una unidad de datos). Esto era importante con respecto a la memoria y el almacenamiento limitados de los sistemas informáticos de la era JOVIAL.
El pool de comunicaciones (COMPOOL) en Jovial es similar a las bibliotecas de archivos de encabezado para lenguajes como PL/I y C.
Los sistemas notables que utilizan el software JOVIAL integrado incluyen:
El siguiente ejemplo está tomado del Manual de programación informática para el lenguaje JOVIAL (J73). [3] : 12
PROC RETRIEVE(CODIGO:VALOR); COMENZAR CÓDIGO DEL ARTÍCULO U; VALOR DEL ARTICULO F; VALOR = -99999.; PARA I:0 POR 1 MIENTRAS I<1000; SI CÓDIGO = TABCODE(I); COMENZAR VALOR = TABVALUE(I); SALIDA; FIN FIN
Este ejemplo define un procedimiento denominado RETRIEVE
que toma un argumento de entrada entero sin signo CODE
y un argumento de salida de punto flotante VALUE
. Busca en la matriz de 1000 elementos TABCODE
una entrada que coincida con CODE
y, a continuación, establece la variable de punto flotante VALUE
en el elemento de la matriz TABVALUE
que tenga el mismo índice de matriz coincidente. Si no se encuentra ningún elemento coincidente, VALUE
se establece en −99999.0
.