"Computer Programming Manual for the Jovial (J73) Language"
JOVIAL fue desarrollado como un lenguaje de programación lenguaje de programación "de orden superior".[3] 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.[4]
El nombre JOVIAL es un acrónimo de Jules' Own Version[5] of the International Algebraic Language; International Algorithmic Language (IAL) fue un nombre que se propuso originalmente para ALGOL 58.[6] 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.[7]
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.[8]
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.[2]
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.[11]
Influencia
Entre los lenguajes influidos por JOVIAL se incluyen CORAL, SYMPL, Space Programming Language (SPL), y en alguna medida CMS-2.[12] Un subconjunto interactivo de JOVIAL llamado TINT, similar a JOSS, fue desarrollado en los años 60.[7]
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:
El siguiente ejemplo se tomó del manual Computer Programming Manual for the JOVIAL (J73) Language.[3]: 12
PROC RETRIEVE(CODE:VALUE);
BEGIN
ITEM CODE U;
ITEM VALUE F;
VALUE = -99999.;
FOR I:0 BY 1 WHILE I<1000;
IF CODE = TABCODE(I);
BEGIN
VALUE = TABVALUE(I);
EXIT;
END
END
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.
↑«JOVIAL (J73) and MIL-STD-1750A ISA Software Support Tools». Periódico Ada–JOVIAL (High Order Language Control Facility, Wright-Patterson AFB, U.S. Air Force). Septiembre de 1993. pp. 21-24.