JOVIAL

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

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

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

В конце 1970-х и начале 1980-х годов ВВС США приняли стандартизованный процессор MIL-STD-1750A, и программы на JOVIAL создавались для этого процессора. Для таких процессоров несколько коммерческих компаний разработали компиляторы и связанные с ними инструменты для разработки на JOVIAL (Advanced Computer Techniques[англ.], TLD Systems[англ.], 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. Кроме того, DDC-I[англ.], который приобрёл части Advanced Computer Techniques[англ.], по-прежнему отображает компиляторы JOVIAL и связанные с ними инструменты.[6]

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

По словам Шварца, JOVIAL испытал влияние таких языков программирования, как CORAL[англ.], SYMPL[англ.], Space Programming Language (SPL) и, в некоторой степени, CMS-2[англ.].[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.

Примечания

[править | править код]
  1. Oral History interview with Jules I. Schwartz.
  2. 1 2 Jules I. Schwartz. The Development of Jovial (англ.) // ACM SIGPLAN Notices. — 1978. — 8 September (vol. 13, no. 8). — P. 203. Архивировано 5 ноября 2018 года.
  3. Martin Campbell-Kelly. From airline reservations to Sonic the Hedgehog: a history of the software industry (англ.) // Cambridge Mass: The MIT Press. — 2003. — ISSN 0-262-03303-8.
  4. Oral history interview with Oscar Schachter (англ.) // Charles Babbage Institute. — P. 17.
  5. JOVIAL (J73) and MIL-STD-1750A ISA Software Support Tools // Ada–JOVIAL Newsletter. — 1993 9. — С. 21—24.
  6. Mature Development Systems, Field Proven on Hundreds of Applications // DDC-I.
  7. Gordon Rayner. UK flights chaos: Air traffic control computers using software from the 1960s (англ.) // Daily Telegraph. — 2016. — 12 December. Архивировано 3 июля 2018 года.
  8. Semantic Designs. Semantic Designs Aligns with Northrop Grumman to Modernize B-2 Spirit Bomber Software Systems (англ.). Архивировано 9 сентября 2018 года.
  9. U.S. Navy. Digital Computer Basics Rate Training Manual // NAVEDTRA 10088-B. — 1978.
  10. Wolfgang A. Halang, Alexander D. Stoyenko. Constructing Predictable Real Time Systems (англ.) // Springer Verlag. — 1991. — P. 31. — ISSN 978-1-4615-4032-8.
  11. Softech, Inc. COMPUTER PROGRAMMING MANUAL FOR THE JOVIAL (J73) LANGUAGE // ROME AIR DEVELOPMENT CENTER. — 1981. — Июнь. — С. 12. Архивировано 1 марта 2017 года.