# JOVIAL

JOVIAL es un lenguaje de programación de alto nivel basado en ALGOL 58, especialmente diseñado para su uso en sistemas embebidos (sistemas de cómputo especializados, diseñados para realizar una o varias tareas específica, donde estos normalmente forman parte de un sistema mayor). Este fue un lenguaje de programación de sistemas relevante en los años 60 y 70.

## Historia

JOVIAL fue desarrollado como un lenguaje de programación lenguaje de programación "de orden superior". Este fue creado en el año 1959 por un equipo en System Development Corporation (SDC), liderado por Jules Schwartz con la finalidad de crear software para la electrónica de la aviación militar.
El nombre JOVIAL es un acrónimo de Jules' Own Version of the International Algebraic Language; International Algorithmic Language (IAL) fue un nombre que se propuso originalmente para ALGOL 58. De acuerdo a Schwartz, al lenguaje se le llamó originalmente OVIAL, pero se rechazo por varios motivos. Fue entences cuando se propuse el nombre JOVIAL, donde la J no aporta ningún significado especial. Se propuso medio en broma que el lenguaje llevara el nombre de Schwartz, puesto que el fue el Presidente del Consejo de Administración, y este nombre no oficial se quedó marcado.
Durante los años 60, JOVIAL fue parte de la serie de proyectos L (L-project) de la milicia estadounidense, específicamente el proyecto ITT 465L Strategic Air Command Control System (el proyecto Strategic Automated Command and Control System (SACCS)), debido a la carencia de lenguajes de programación en sistemas en tiempo real. El 95 por ciento del proyecto SACCS, controlado por el International Telephone & Telegraph (ITT) cuyo software fue escrito por SDC, se implementó en JOVIAL. La parte del software del proyecto tomó dos años y menos de 1400 años de programador, menos en comparación al tiempo dedicado en el proyecto L SAGE.
Entre finales de los años 70 y principios de los 80, la Fuerza Aérea de los Estados Unidos adoptó una estandarización de una unidad central de procesamiento (CPU), con el conjunto de instrucciones MIL-STD-1750A, para el cual se escribieron diversos programas en JOVIAL. Algunas marcas comerciales proporcionaban compiladores y herramientas de programación que permiten compilar programas en JOVIAL para procesadores como el MIL-STD-1750A, entre las que se encuentran Advanced Computer Techniques (ACT), TLD Systems, Proprietary Software Systems (PSS), entre otras.
JOVIAL fue estandarizado en el año 1973 dando el estándar MIL-STD-1589 y fue revisado en el año 1984 dando el estándar MIL-STD-1589C. Actualmente se sigue usando para actualizar y mantener software en aviación y vehículos militares antiguos. Hay tres dialectos usados por igual: J3, J3B-2 y J73.
A 2010, USAF JOVIAL Program Office (JPO) ha dejado de mantener y distribuir JOVIAL. El software distribuido por JPO se sigue pudiendo encontrar a través de recursos comerciales en el Software Engineering Associates, Inc., (SEA) al igual que otras combinaciones de procesadores y sistemas operativos como Windows, Linux, Mac OS X en PowerPC, SPARC, VAX, 1750A, PowerPC, TI-9989, Zilog Z800x, Motorola 680x0, IBM System 360, System 370, y System z. Más allá, la compañía DDC-I, la cual adquirió partes de Advanced Computer Techniques, también proporciona compiladores de JOVIAL y herramientas relacionadas a 2020 de 04.
La mayorsia del software implementado en JOVIAL es para sistemas esenciales, donde el mantenimiento es cada vez más complicado. En diciembre de 2014, se denunció que el software proveniente de código en JOVIAL producido en los años 60 fue causa de un fallo mayor en el control de tráfico aéreo de la infraestructura de Reino Unido, y también que la agencia que lo usa, NATS Holdings, tenía qu eenseñar a su personal de informática y telecomunicaciones el lenguaje JOVIAL, de tal forma que pudieran seguir manteniendo su software, el cual no estaba planificado para su reemplazo hasta 2016.

## Influencia

Entre los lenguajes influidos por JOVIAL se incluyen CORAL, SYMPL, Space Programming Language (SPL), y en alguna medida CMS-2. Un subconjunto interactivo de JOVIAL llamado TINT, similar a JOSS, fue desarrollado en los años 60.

## Características

JOVIAL incluye características que no se incluyen en el estándar de ALGOL, tales como items (ahora llamados estructuras), arreglos de estructuras, variables de estado (ahora llamadas enumerados) y lenguaje ensamblador en-línea.
También proveía de datos "empaquetados" en tablas. El empaquetado en tablas se refiere a asignación y reserva de estructuras dentro de una entrada de palabras de almacenamiento (bits en una unidad de datos). Esto fue importante por la memoria y almacenamiento limitados en la era de JOVIAL.
La interfaz de la pool de comunicaciones (COMPOOL) en Jovial es similar a las encontradas en lenguajes como PL/I y C.

## Applications

Algunos ejemplos de sistemas importantes que unan JOVIAL embebido:
* Satélite de comunicaciones Milstar
* Advanced Cruise Missile
* Bombarderos B-52, B-1B, B-2
* Aeronaves de transporte militar C-130, C-141, C-17
* Aeronaves de combate F-111, F-15, F-16 (antes del Block 50), F-117
* LANTIRN
* Aeronave U-2
* Aeronave Boeing E-3 Sentry AWACS (antes del Block 40/45)
* Cruceros de la marina Aegis
* Multiple Launch Rocket System (MLRS) de la armada
* Sikorsky UH-60 Black Hawk helicópteros de la armada
* Motores de reacción F100, F117, F119
* Defensa aérea y sistema de control NORAD (sistema Hughes HME-5118ME)
* Sistema NATO Air Defence Ground Environment (NADGE)
* Motores de cohetes RL10
* Control de tráfico aéreo NAS (National Airspace System) civil
* Sistemas de radar aerotransportados APG-70, APG-71 y APG-73

## Ejemplo

El siguiente ejemplo se tomó del manual Computer Programming Manual for the JOVIAL (J73) Language.$^{:12}$
Este ejemplo define una función llamada RETRIEVE que toma como parámetro de entrada un entero sin signo llamado CODE y da como salida un valor en coma flotante llamado VALUE. Esta busca el elementoCODEen un arreglo de tamaño 1000, llamadoTABCODE, y entonces asigna el valor encontrado al valor en coma flotante llamado VALUE. Si no se encuentra el valor, VALUE toma el valor por defecto de−99999.0.