Русская Википедия:JOVIAL

Материал из Онлайн справочника
Перейти к навигацииПерейти к поиску

JOVIAL — высокоуровневый язык программирования, похожий на ALGOL, специализированный на разработке встраиваемых систем.

История

JOVIAL был разработан в 1959 году как новый «высококачественный» язык программирования командой корпорации System Development Corporation (SDC) во главе с Шаблон:Iw для создания программного обеспечения для электроники военных самолётов[1]. Название JOVIAL является аббревиатурой «Jules' Own Version of the International Algebraic Language». По словам Шварца, язык изначально назывался OVIAL, но это название по разным причинам отвергалось. Тогда было предложено название «JOVIAL», без какого-либо значения буквы «J» (на Шаблон:Lang-en, Шаблон:Lang-fr, Шаблон:Lang-es и т.д. Шаблон:Lang-en2 «весёлый; жизнерадостный»). В шутку было высказано предположение, что язык назван в честь Шварца, поскольку он председательствовал на собрании, и это неофициальное название окончательно закрепилось.[2]

В 1960-е годы JOVIAL был частью серии военных проектов США, в частности Шаблон:Iw (проект Шаблон:Iw) из-за отсутствия доступных языков обработки в режиме реального времени. Около 95 % программного обеспечения проекта SACCS было написано на JOVIAL.[3]

В конце 1970-х и начале 1980-х годов ВВС США приняли стандартизованный процессор MIL-STD-1750A, и программы на JOVIAL создавались для этого процессора. Для таких процессоров несколько коммерческих компаний разработали компиляторы и связанные с ними инструменты для разработки на JOVIAL (Шаблон:Iw, Шаблон:Iw, Proprietary Software Systems и другие).[4][5]

JOVIAL был стандартизован в 1973 году как MIL-STD-1589; развитие языка было зафиксировано в 1984 году в MIL-STD-1589C. Язык по-прежнему широко используется для обновления и обслуживания программного обеспечения на старых военных транспортных средствах и самолётах. Существует три диалекта: J3, J3B-2 и J73.

По состоянию на 2010 год JOVIAL больше не поддерживается и не распространяется Управлением программ JOVIAL USAF (JPO). Программное обеспечение, ранее распространенное JPO, по-прежнему доступно через коммерческие ресурсы Software Engineering Associates, Inc. (SEA), а также другие хост-процессоры, включая Microsoft Windows, Linux, Mac OS X на PowerPC, SPARC, VAX, 1750A, PowerPC , TI-9989, Zilog Z800x, Motorola 680x0 и IBM System 360 / System 370 / System z. Кроме того, Шаблон:Iw, который приобрёл части Шаблон:Iw, по-прежнему отображает компиляторы JOVIAL и связанные с ними инструменты.[6]

Большинство программ, реализованных на JOVIAL, имеют критически важное значение, и их обслуживание становится всё более сложным. В декабре 2014 года было сообщено, что программное обеспечение, использующее JOVIAL, выпущенное в 1960-х годах, было связано с крупным провалом инфраструктуры управления воздушным движением Соединённого Королевства и что использующее его агентство должно было обучать своих IT-специалистов программированию на JOVIAL, чтобы они могли работать с этим программным обеспечением, которое не планируется заменять до 2016 года.[7] Поэтому преобразование кода JOVIAL на новые платформы становится всё более распространённым явлением. Конверция JOVIAL на другие языки в настоящее время выполняются Semantic Designs, инструмент Шаблон:Iw использовался для преобразования некоторых программ JOVIAL для бомбардировщика B-2 на язык C.[8]

Влияние

По словам Шварца, JOVIAL испытал влияние таких языков программирования, как Шаблон:Iw, Шаблон:Iw, Space Programming Language (SPL) и, в некоторой степени, Шаблон:Iw.[9] Интерактивное подмножество JOVIAL под названием TINT, похожее на JOSS, было разработано в 1960-х годах.[2]

Особенности

JOVIAL включает функции, не найденные в стандартном ALGOL, такие как записи, массивы записей и встроенный язык ассемблера.[10]

Пример

Следующий пример взят из «Руководства по программированию на языке JOVIAL (J73)».[11]

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

В этом примере определяется процедура с именем RETRIEVE, которая принимает аргумент CODE с целым беззнаковым числом и аргумент вывода с плавающей запятой VALUE. Он ищет в 1000-элементном массиве TABCODE запись, которая соответствует CODE, а затем устанавливает переменную VALUE с плавающей запятой в элемент массива TABVALUE, имеющий тот же самый соответствующий индекс массива. Если соответствующий элемент не найден, значение VALUE равно -99999.0.

Примечания

Шаблон:Примечания