| 패러다임 | 절차적, 명령형, 구조적 |
|---|---|
| 계열 | 알골 |
| 설계자 | 시스템 디밸롭먼트 코퍼레이션 |
| 개발자 | Software Engineering Associates |
| 발표일 | 1960년 |
| 자료형 체계 | 정적, 강한, 안전, 구조적 |
| 변수 영역 | 렉시컬 |
| 주요 구현체 | |
| MVS, OpenVMS, macOS, 윈도우, 리눅스, SPARC, 파워PC, MIL-STD-1750A, 기타 레거시 시스템 | |
| 방언 | |
| J3, J3B-2, J73 | |
| 영향을 받은 언어 | |
| 알골, SAGE | |
| 영향을 준 언어 | |
| CMS-2, Coral 66, SYMPL | |
JOVIAL은 알골 58을 기반으로 한 고급 프로그래밍 언어로, 임베디드 시스템 개발에 특화되어 있다. 1960년대와 1970년대에 주요 시스템 프로그래밍 언어로 사용되었다.

JOVIAL은 군용 항공기 전자 장비의 소프트웨어를 작성하기 위해 쥘 슈워츠(Jules Schwartz)가 이끄는 시스템 디밸롭먼트 코퍼레이션(SDC) 팀이 1959년부터 개발한 새로운 "고급"프로그래밍 언어이다.: 1
JOVIAL이라는 이름은 Jules' Own Version(줄의 독자적인 버전)의 약자이며, 국제 대수 언어(International Algebraic Language)에서 따왔다. 국제 알고리즘 언어(IAL)는 본래 알골 58을 위해 제안된 이름이었다. 슈워츠에 따르면, 이 언어는 원래 OVIAL로 불릴 예정이었으나 여러 이유로 반대에 부딪혔다. 이후 J에 특별한 의미 없이 JOVIAL이라는 이름이 제안되었다. 농담 삼아 이 언어가 회의 의장이었던 슈워츠의 이름을 딴 것이라고 제안되었고, 이 비공식적인 이름이 굳어졌다.
1960년대 동안 JOVIAL은 사용 가능한 실시간 컴퓨팅 프로그래밍 언어의 부족으로 인해 미군 L-프로젝트 시리즈, 특히 ITT 465L 전략공군지휘통제시스템(전략 자동 지휘 통제 시스템(SACCS) 프로젝트)의 일부였다. SDC가 작성한 소프트웨어를 중심으로 인터내셔널 텔레폰 앤 텔레그래프(ITT)가 관리한 SACCS 프로젝트의 약 95%가 JOVIAL로 작성되었다. 이 소프트웨어 프로젝트는 2년이 걸렸으며 1,400명 미만의 프로그래머 연수가 투입되었는데, 이는 SAGE L-프로젝트에 투입된 시간의 절반 미만이었다.

1970년대 후반과 1980년대 초반에 미국 공군은 표준화된 중앙 처리 장치(CPU)인 MIL-STD-1750A를 채택했으며, 이후의 JOVIAL 프로그램은 해당 프로세서를 위해 구축되었다. 여러 상용 공급업체가 Advanced Computer Techniques(ACT), TLD Systems, Proprietary Software Systems(PSS) 등을 포함하여 MIL-STD-1750A와 같은 프로세서용 JOVIAL을 구축하기 위한 컴파일러 및 관련 프로그래밍 도구를 제공했다.
JOVIAL은 1973년 MIL-STD-1589로 표준화되었고 1984년 MIL-STD-1589C로 개정되었다. 이 언어는 여전히 구형 군용 차량 및 항공기의 소프트웨어를 업데이트하고 유지보수하는 데 사용된다. 흔히 사용되는 방언으로는 J3, J3B-2, J73 세 가지가 있다.
2010년 기준으로, JOVIAL은 더 이상 미 공군 JOVIAL 프로그램 사무국(JPO)에 의해 유지보수 및 배포되지 않는다. 과거 JPO에서 배포했던 소프트웨어는 윈도우, 리눅스, 파워PC 기반 맥 OS X, SPARC, VAX, 1750A, 파워PC, TI-9989, 자일로그 Z800x, 모토로라 680x0, IBM 시스템/360, IBM 시스템/370, IBM 시스템 z 등 다양한 호스트/타겟 프로세서 조합과 함께 Software Engineering Associates, Inc.(SEA)와 같은 상용 자원을 통해 여전히 이용 가능하다. 또한, Advanced Computer Techniques의 일부를 인수한 DDC-I도 2020년 4월 기준으로 JOVIAL 컴파일러와 관련 도구 목록을 제공하고 있다.
JOVIAL로 구현된 대부분의 소프트웨어는 미션 크리티컬하며, 유지보수는 점점 더 어려워지고 있다. 2014년 12월, 1960년대에 작성된 JOVIAL 코드로 생성된 소프트웨어가 영국의 항공 교통 관제 인프라의 주요 장애에 연루되었으며, 해당 기관인 NATS Holdings가 소프트웨어 유지보수를 위해 IT 직원들에게 JOVIAL을 교육해야 했다는 사실이 보도되었다. 이 소프트웨어는 2016년까지 교체될 예정이 아니었다.
JOVIAL의 영향을 받은 언어로는 CORAL, SYMPL, Space Programming Language(SPL) 및 어느 정도 CMS-2가 있다. 1960년대에는 JOSS와 유사한 TINT라는 JOVIAL의 대화형 하위 집합이 개발되었다.
JOVIAL은 표준 알골에는 없는 기능들을 포함하고 있는데, 아이템(현재의 구조체), 아이템 배열, 상태 변수(현재의 열거형), 인라인 어셈블러 등이 있다.
또한 테이블 내 "패킹된" 데이터를 위한 조항도 포함되어 있었다. 테이블 패킹은 항목을 저장 공간의 워드(데이터 단위의 비트)로 할당하는 것을 의미한다. 이는 JOVIAL 시대의 컴퓨팅 시스템이 가진 제한된 메모리와 저장 공간 측면에서 중요했다.
Jovial의 COMPOOL(Communication Pool)은 PL/I이나 C 언어의 헤더 파일 라이브러리와 유사하다.
임베디드 JOVIAL 소프트웨어를 사용하는 주요 시스템은 다음과 같다.
다음 예제는 Computer Programming Manual for the JOVIAL (J73) Language에서 발췌한 것이다.: 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
이 예제는 부호 없는 정수 입력 인수 CODE와 부동 소수점 출력 인수 VALUE를 받는 RETRIEVE라는 프로시저를 정의한다. 1000개 요소 배열 TABCODE에서 CODE와 일치하는 항목을 검색하고, 부동 소수점 변수 VALUE를 같은 배열 인덱스를 가진 TABVALUE 배열의 요소로 설정한다. 일치하는 요소가 없으면 VALUE는 −99999.0으로 설정된다.