JOVIAL (زبان برنامه‌نویسی)

**JOVIAL** یک زبان برنامه‌نویسی سطح بالا است که بر اساس ALGOL 58 طراحی شده و برای توسعه سیستم‌های تعبیه‌شده تخصیص یافته است (سیستم‌های کامپیوتری تخصصی که برای انجام یک یا چند وظیفه اختصاصی طراحی شده‌اند و معمولاً به عنوان بخشی از یک دستگاه بزرگتر و کامل‌تر که شامل قطعات مکانیکی نیز می‌شود، تعبیه می‌شوند). این زبان یک زبان برنامه‌نویسی سیستم اصلی و مهم در دهه‌های ۱۹۶۰ و ۱۹۷۰ بود.

## تاریخچه

JOVIAL به عنوان یک زبان برنامه‌نویسی "سطح بالا" و جدید از سال ۱۹۵۹ توسط تیمی در شرکت توسعه سیستم (SDC) به سرپرستی جولز شوارتز برای نوشتن نرم‌افزارهای الکترونیک هواپیماهای نظامی توسعه یافت.

نام *JOVIAL* مخفف عبارت *نسخه خاص جولز* * از زبان بین‌المللی جبری است؛ زبان بین‌المللی الگوریتمی* (IAL) نامی بود که در اصل برای ALGOL 58 پیشنهاد شده بود. طبق گفته شوارتز، این زبان در ابتدا *OVIAL* نامیده می‌شد، اما این نام به دلایل مختلفی مورد مخالفت قرار گرفت. سپس *JOVIAL* پیشنهاد شد، بدون اینکه معنی خاصی به *J* نسبت داده شود. به‌طور کمی طنزآمیز، پیشنهاد شد که زبان به نام شوارتز نامگذاری شود، زیرا او رئیس جلسه بود و این نام غیررسمی باقی ماند.

در دهه ۱۹۶۰، JOVIAL بخشی از مجموعه *پروژه‌های نظامی L* ایالات متحده بود، به ویژه سیستم کنترل فرماندهی هوایی استراتژیک ITT 465L (پروژه سیستم فرماندهی و کنترل خودکار استراتژیک (SACCS))، به دلیل نبود زبان‌های برنامه‌نویسی محاسبات بلادرنگ موجود. حدود ۹۵ درصد از پروژه SACCS، که توسط شرکت بین‌المللی تلفن و تلگراف (ITT) مدیریت می‌شد و نرم‌افزار آن عمدتاً توسط SDC نوشته شده بود، به زبان JOVIAL توسعه یافته بود. این پروژه نرم‌افزاری دو سال به طول انجامید و کمتر از ۱۴۰۰ سال-برنامه‌نویس صرف شد، که کمتر از نصف زمان معادل در پروژه SAGE L بود.

در اواخر دهه ۱۹۷۰ و اوایل دهه ۱۹۸۰، نیروی هوایی ایالات متحده یک واحد پردازش مرکزی (CPU) استاندارد به نام MIL-STD-1750A را پذیرفت و برنامه‌های JOVIAL بعدی برای آن پردازنده ساخته شدند. چندین فروشنده تجاری کامپایلرها و ابزارهای برنامه‌نویسی مرتبط برای ساخت JOVIAL برای پردازنده‌هایی مانند MIL-STD-1750A را ارائه دادند، از جمله Advanced Computer Techniques (ACT)، TLD Systems، Proprietary Software Systems (PSS) و دیگر موارد.

JOVIAL در سال ۱۹۷۳ با استاندارد MIL-STD-1589 استاندارد شد و در سال ۱۹۸۴ با استاندارد *MIL-STD-1589C* بازنگری شد. این زبان هنوز برای به‌روزرسانی و نگهداری نرم‌افزار در خودروها و هواپیماهای نظامی قدیمی استفاده می‌شود. سه گویش رایج در این زمینه مورد استفاده هستند: J3، J3B-2، و J73.

از سال ۲۰۱۰، JOVIAL دیگر توسط دفتر برنامه JOVIAL نیروی هوایی ایالات متحده (JPO) نگهداری و توزیع نمی‌شود. نرم‌افزاری که قبلاً توسط JPO توزیع می‌شد، همچنان از طریق منابع تجاری در شرکت Software Engineering Associates, Inc. (SEA) در دسترس است، همچنین ترکیبات دیگر میزبان/پردازنده هدف شامل Windows، Linux ، SPARC، VAX، 1750A، PowerPC، TI-9989، Zilog Z800x، Motorola 680x0 و IBM System 360، System 370، System z و  Mac OS X روی PowerPC نیز موجود است. علاوه بر این، DDC-I که بخش‌هایی از Advanced Computer Techniques را به دست آورده است، همچنان کامپایلرها و ابزارهای مرتبط با JOVIAL را تا آوریل ۲۰۲۰ لیست می‌کند.

بیشتر نرم‌افزارهایی که به زبان JOVIAL پیاده‌سازی شده‌اند، بحرانی و ماموریت‌محور هستند و نگهداری آنها به‌طور فزاینده‌ای دشوارتر می‌شود. در دسامبر ۲۰۱۴، گزارش شد که نرم‌افزاری مشتق شده از کد JOVIAL که در دهه ۱۹۶۰ تولید شده بود، در یک خرابی عمده زیرساخت کنترل ترافیک هوایی بریتانیا نقش داشت و آژانسی که از آن استفاده می‌کند، یعنی NATS Holdings، مجبور به آموزش کارکنان فناوری اطلاعات خود در زبان JOVIAL بود تا بتوانند این نرم‌افزار را نگهداری کنند، که قرار نبود تا سال ۲۰۱۶ جایگزین شود.

## تاثیر
زبان‌هایی که تحت تأثیر JOVIAL قرار گرفته‌اند شامل ''CORAL''، ''SYMPL، *زبان برنامه‌نویسی فضایی* (SPL)، و تا حدی CMS-2 هستند. همچنین، یک زیرمجموعه تعاملی از JOVIAL به نام TINT، مشابه JOSS، در دهه ۱۹۶۰ توسعه یافت.

## ویژگی‌ها
JOVIAL شامل ویژگی‌هایی است که در ALGOL استاندارد وجود ندارند، مانند آیتم‌ها (که اکنون به عنوان ساختارها شناخته می‌شوند)، آرایه‌هایی از آیتم‌ها، متغیرهای وضعیت (که اکنون به عنوان شمارش‌ها شناخته می‌شوند) و زبان اسمبلی درون‌خطی.

این زبان همچنین امکاناتی برای داده‌های "بسته‌بندی شده" در جداول را فراهم می‌کرد. بسته‌بندی جدول به تخصیص آیتم‌ها در یک ورودی به کلمات ذخیره‌سازی (بیت‌ها در یک واحد داده) اشاره دارد. این امر با توجه به حافظه و ذخیره‌سازی محدود سیستم‌های محاسباتی دوره JOVIAL اهمیت داشت.

مخزن ارتباطی (COMPOOL) در JOVIAL مشابه کتابخانه‌های فایل‌های سرآمد (header) در زبان‌هایی مانند PL/I و C است.

## کاربردها
سیستم‌های برجسته‌ای که از نرم‌افزار جاسازی‌شده JOVIAL استفاده می‌کنند شامل:
*ماهواره ارتباطی Milstar
*موشک کروز پیشرفته
*بمب‌افکن‌های B-52، B-1B، B-2
*هواپیماهای ترابری C-130، C-141، C-17
*هواپیماهای جنگنده F-111، F-15، F-117، F-16
*LANTIRN
*هواپیمای U-2
*هواپیماهای Boeing E-3 Sentry AWACS (قبل از Block 40/45)
*رزم‌ناوهای Navy Aegis
*سیستم راکت‌انداز چندگانه ارتش (MLRS)
*هلیکوپترهای Sikorsky UH-60 Black Hawk ارتش
*موتورهای جت F100، F117، F119
*سیستم دفاع هوایی و کنترل NORAD (سیستم Hughes HME-5118ME)
*سیستم دفاع هوایی زمینی ناتو (NADGE)
*موتورهای موشکی RL10
*کنترل ترافیک هوایی سیستم هوایی ملی (NAS) مدنی
*سیستم‌های رادار هوابرد APG-70، APG-71، و APG-73

## مثال
مثال زیر از *کتابچه راهنمای برنامه‌نویسی کامپیوتری برای زبان JOVIAL (J73)* گرفته شده است:

```text
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-` تنظیم می‌شود.

## منابع

## پیوند به بیرون
*The Development of Jovial
* 
* April 2006 archive of the JOVIAL Program Office
* Page on Jules Schwartz, including film of a humorous talk on the development of JOVIAL
* DODSSP U.S. Department of Defense Single Stock Point for Military Specifications, Standards and Related Publications
* Software Engineering Associates
* DDC-I, Inc.: DDC-I JOVIAL Compiler System (DJCS)
* Archived at Ghostarchive and the Wayback Machine: 
* 
رده:زبان‌های برنامه‌نویسی رویه‌ای
رده:زبان‌های برنامه‌نویسی سیستمی
رده:زبان‌های برنامه‌نویسی اویونیک