Czym jest JOVIAL i dlaczego warto go poznać
JOVIAL (Jules Own Version of the International Algorithmic Language) to język programowania stworzony w 1959 roku dla amerykańskich sił powietrznych. Tak, nazwa pochodzi od imienia twórcy — Julesa Schwartz’a — i jest prawdopodobnie jedynym językiem programowania nazwanym na cześć swojego autora w tak nieformalny sposób. JOVIAL był przez dekady standardem w systemach lotniczych i wojskowych USA, i mimo że dziś jest praktycznie zapomniany, jego wpływ na rozwój języków embedded i real-time jest niezaprzeczalny.
JOVIAL to język, który musiał być niezawodny w czasach, gdy “niezawodny” oznaczało “działa na sprzęcie, który ma mniej mocy niż twój smartwatch”. To wymuszało dyscyplinę projektową, której brakuje wielu współczesnym językom. Jeśli interesuje cię, jak pisano oprogramowanie dla systemów krytycznych przed erą Ady i C — JOVIAL jest odpowiedzią.
Dlaczego warto go znać? Bo JOVIAL to missing link między ALGOL-em a Adą. To język, który pokazał, że ALGOL-owa elegancja może współistnieć z wymaganiami systemów wojskowych — i który bezpośrednio zainspirował projektantów Ady.
Krótka historia i ewolucja
JOVIAL został stworzony przez Julesa Schwartza z System Development Corporation (SDC) w 1959 roku. SDC była firmą, która rozwijała system SAGE (Semi-Automatic Ground Environment) — gigantyczny system obrony powietrznej USA, który był jednym z pierwszych rozproszonych systemów komputerowych na świecie. SAGE potrzebował języka, który byłby bardziej przenośny niż assembler, ale bardziej efektywny niż FORTRAN.
JOVIAL bazował na ALGOL 58 (nie ALGOL 60 — ten jeszcze nie istniał), ale dodał mechanizmy specyficzne dla systemów embedded: operacje na bitach, kontrolę nad alokacją pamięci, struktury danych odpowiadające sprzętowym rejestrów. JOVIAL J3 (1961) i JOVIAL J3B były głównymi wersjami używanymi w systemach wojskowych.
JOVIAL był standardem USAF (United States Air Force) przez ponad 30 lat. Systemy lotnicze jak F-16, F-117, B-1B, B-2, AWACS i wiele systemów satelitarnych używały JOVIAL. Standard MIL-STD-1589 (1981) formalizował JOVIAL jako język dla systemów wojskowych. Dopiero Ada w latach 90. zaczęła zastępować JOVIAL w nowych projektach.
Kluczowe cechy i filozofia
JOVIAL był językiem proceduralnym z dziedzictwem ALGOL-a, ale z pragmatycznymi dodatkami dla systemów embedded. Miał bloki kodu (jak ALGOL), ale dodawał operacje na bitach i bajtach — kluczowe dla interfejsowania się ze sprzętem. Miał struktury danych (ITEM i TABLE), które pozwalały mapować dane na konkretne adresy pamięci.
Typowanie w JOVIAL było statyczne i precyzyjne. Mogłeś określić dokładną liczbę bitów dla każdej zmiennej — ITEM BIT_VALUE B1 dla 1-bitowej flagi, ITEM COUNTER F16 dla 16-bitowej liczby całkowitej. Ta precyzja była niezbędna w erze, gdy pamięć była mierzona w kilobajtach, a każdy bit się liczył.
Filozofia JOVIAL to “ALGOL-owa czytelność z embedded-ową kontrolą”. Język miał być zrozumiały dla ludzi (stąd ALGOL-owa składnia), ale jednocześnie dawać programiście kontrolę nad sprzętem (stąd operacje bitowe i precyzyjna alokacja pamięci). To balans, który później Ada próbowała osiągnąć na większą skalę.
JOVIAL wspierał też “status variables” — wbudowany mechanizm raportowania błędów, który pozwalał sprawdzać status operacji bez przerywania przepływu programu. To była wczesna forma error handling, zaprojektowana dla systemów, które nie mogły sobie pozwolić na crash.
Gdzie JOVIAL sprawdza się najlepiej
JOVIAL był używany prawie wyłącznie w systemach wojskowych i lotniczych USA. Systemy nawigacji, sterowania lotem, radarowe, komunikacji satelitarnej, uzbrojenia — to było naturalne środowisko JOVIAL. F-16 Fighting Falcon, jeden z najpopularniejszych myśliwców na świecie, miał oprogramowanie napisane w JOVIAL. Systemy AWACS (Airborne Warning and Control System) również używały JOVIAL.
Poza sektorem wojskowym, JOVIAL znalazł ograniczone zastosowania w systemach kontroli ruchu lotniczego (FAA) i w niektórych systemach przemysłowych. Ale jego główną domeną zawsze było wojsko.
Dziś JOVIAL jest praktycznie nieużywany w nowych projektach. Niektóre legacy systemy wojskowe wciąż działają na kodzie JOVIAL (bo “if it ain’t broke…”), ale nowe projekty używają Ady lub C. Istnieją narzędzia do migracji JOVIAL → C/Ada, ale to rynek malejący.
Jak wygląda kod w JOVIAL
BEGIN
ITEM COUNTER F16
ITEM SUM F32
ITEM I F16
SUM = 0.0
FOR I = 1 BY 1 WHILE I <= 100;
SUM = SUM + I
END
TERM
END
Składnia JOVIAL jest rozpoznawalna jako ALGOL-owa, ale z własnymi konwencjami. ITEM deklaruje zmienne z precyzyjnym typowaniem (F16 = 16-bit float, F32 = 32-bit float). Pętla FOR ... BY ... WHILE to konstrukcja specyficzna dla JOVIAL.
BEGIN
ITEM STATUS_CODE B8
ITEM ERROR_FLAG B1
ITEM READING F32
PROC READ_SENSOR(ADDR U24) READING
BEGIN
ITEM ADDR U24
ITEM READING F32
! Odczyt z rejestru sprzętowego
READING = *ADDR
IF READING < 0.0;
ERROR_FLAG = 1
ELSE;
ERROR_FLAG = 0
END
END
READ_SENSOR(16#FF00#)
END
Operacje na adresach sprzętowych i precyzyjna kontrola nad typami — typowe dla JOVIAL w systemach embedded. U24 to 24-bitowy unsigned integer, B1 to 1-bitowa flaga.
Ekosystem i narzędzia
JOVIAL miał kilka implementacji: JOVIAL J3 (oryginalna), JOVIAL J3B (rozszerzona), JOVIAL J73 (standard USAF z 1983). Kompilatory były dostarczane przez SDC, a później przez firmy jak Computer Sciences Corporation i various defense contractors. JOVIAL działał na różnych platformach: IBM 7090, UNIVAC 1108, PDP-11, VAX i wielu innych.
Współczesne narzędzia? Praktycznie nie istnieją. Nie ma otwartoźródłowych kompilatorów JOVIAL, nie ma IDE, nie ma emulatorów. Kilka firm (jak Semantic Designs) oferuje narzędzia do migracji kodu JOVIAL na C lub Ada, ale to narzędzia komercyjne dla konkretnych projektów migracyjnych.
Społeczność JOVIAL to głównie emerytowani inżynierowie lotniczy i wojskowi, którzy pamiętają czasy, gdy JOVIAL był standardem. Nie ma aktywnych forów, konferencji ani grup dyskusyjnych. JOVIAL jest częścią historii, nie teraźniejszości.
Mocne i słabe strony
Mocne strony JOVIAL to jego precyzja i kontrola. W erze, gdy pamięć była luksusem, JOVIAL pozwalał kontrolować każdy bit. ALGOL-owa składnia była czytelna, a mechanizmy error handling (status variables) były wyprzedzające swoje czasy. JOVIAL udowodnił, że język wysokiego poziomu może być używany w systemach krytycznych — to była rewolucja w latach 60.
Słabe strony to ograniczona przenośność (kompilatory były specyficzne dla platform), brak standaryzacji na poziomie ALGOL-a czy FORTRAN-a, i wreszcie — bycie “językiem wojskowym”, co ograniczało adopcję cywilną. JOVIAL był też mniej ekspresyjny niż Ada, która go zastąpiła — brakowało mu zaawansowanego typowania, kontraktów i współbieżności wbudowanej w język.
Podsumowanie
JOVIAL to język, który trzymał w powietrzu amerykańskie siły powietrzne przez trzy dekady. Jeśli interesuje cię historia oprogramowania wojskowego, systemy embedded albo ewolucja od ALGOL-a do Ady — JOVIAL jest kluczowym ogniwem w tym łańcuchu. To język, który udowodnił, że software może być niezawodny nawet na sprzęcie, który dziś uważalibyśmy za kalkulator.
Przyszłość JOVIAL nie istnieje jako aktywnego języka. Legacy systemy powoli migrują na Adę i C, a nowe projekty wojskowe używają nowszych narzędzi. Ale dziedzictwo JOVIAL żyje w każdym języku embedded, który stawia na precyzję, kontrolę i niezawodność. Jules Schwartz stworzył coś, co przez 30 lat chroniło niebo — i to jest dziedzictwo, o którym warto pamiętać.

