JOVIAL یک زبان برنامه نویسی سطح بالا بر اساس ALGOL 58 است که برای توسعه سیستم های تعبیه شده (سیستم های کامپیوتری تخصصی که برای انجام یک یا چند عملکرد اختصاصی طراحی شده اند، که معمولاً به عنوان بخشی از یک دستگاه بزرگتر و کاملتر از جمله قطعات مکانیکی طراحی شده اند) تخصصی می باشد. این یک زبان برنامه نویسی سیستم اصلی در دهه 1960 و 1970 بود. [2]
JOVIAL به عنوان یک زبان برنامه نویسی جدید "بالا" [3] : 1 توسعه یافت که در سال 1959 توسط تیمی در شرکت توسعه سیستم (SDC) به سرپرستی جولز شوارتز برای تهیه نرم افزار برای الکترونیک هواپیماهای نظامی شروع شد. [4]
نام JOVIAL مخفف جولز نسخه خود [5] زبان بین المللی جبری است . زبان الگوریتمی بین المللی (IAL) نامی بود که در ابتدا برای ALGOL 58 پیشنهاد شد . [6] به گفته شوارتز، این زبان در ابتدا OVIAL نام داشت ، اما به دلایل مختلف با آن مخالفت شد. JOVIAL سپس پیشنهاد شد ، بدون هیچ معنایی به J. تا حدودی به شوخی پیشنهاد شد که این زبان به نام شوارتز نامگذاری شود، زیرا او رئیس جلسه بود و این نام غیررسمی ماندگار شد. [7]
در طول دهه 1960، JOVIAL به دلیل عدم وجود برنامهنویسی محاسباتی بلادرنگ، بخشی از سری پروژههای L- نظامی ایالات متحده ، به ویژه سیستم کنترل هوایی استراتژیک ITT 465L ( پروژه سیستم فرماندهی و کنترل خودکار استراتژیک (SACCS) بود. زبان های موجود حدود 95 درصد از پروژه SACCS که توسط International Telephone & Telegraph (ITT) با نرم افزاری که عمدتاً توسط SDC نوشته شده است، مدیریت می شود، به زبان JOVIAL نوشته شده است. پروژه نرم افزاری دو سال و کمتر از 1400 سال برنامه نویسی طول کشید، یعنی کمتر از نیمی از زمان معادل پروژه SAGE L. [8]
در اواخر دهه 1970 و اوایل دهه 1980، نیروی هوایی ایالات متحده یک واحد پردازش مرکزی استاندارد (CPU)، MIL-STD-1750A ، و برنامه های بعدی JOVIAL برای آن پردازنده ساخته شد. چندین فروشنده تجاری، کامپایلرها و ابزارهای برنامه نویسی مرتبط را برای ساخت JOVIAL برای پردازنده هایی مانند MIL-STD-1750A، از جمله تکنیک های پیشرفته کامپیوتری (ACT)، سیستم های TLD ، سیستم های نرم افزاری اختصاصی (PSS) و غیره ارائه کردند. [9] [10]
JOVIAL در سال 1973 با MIL-STD-1589 استاندارد شد و در طول سال 1984 با MIL-STD-1589C تجدید نظر شد . هنوز هم برای به روز رسانی و نگهداری نرم افزار در وسایل نقلیه نظامی و هواپیماهای قدیمی استفاده می شود. سه گویش رایج وجود دارد: J3، J3B-2 و J73.
از سال 2010 [به روز رسانی]، JOVIAL دیگر توسط دفتر برنامه JOVIAL USAF (JPO) نگهداری و توزیع نمی شود. نرمافزاری که قبلاً توسط JPO توزیع میشد، همچنان از طریق منابع تجاری در Software Engineering Associates, Inc., (SEA) و سایر ترکیبات پردازندههای میزبان/هدف از جمله 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 که بخشهایی از تکنیکهای پیشرفته رایانه را به دست آورده است، کامپایلرهای JOVIAL و ابزارهای مرتبط را نیز از آوریل 2020 فهرست میکند [به روز رسانی]. [2]
اکثر نرم افزارهای پیاده سازی شده در JOVIAL ماموریت حیاتی هستند و تعمیر و نگهداری در حال رشد دشوارتر است. در دسامبر 2014، گزارش شد که نرمافزار برگرفته از کد JOVIAL که در دهه 1960 تولید شده بود، در یک شکست بزرگ زیرساختهای کنترل ترافیک هوایی بریتانیا نقش داشته و آژانسی که از آن استفاده میکند، هلدینگ NATS ، باید آن را آموزش دهد. کارکنان IT در JOVIAL تا بتوانند این نرم افزار را که تا سال 2016 برای جایگزینی برنامه ریزی نشده بود، نگهداری کنند. [11]
زبان های تحت تأثیر JOVIAL عبارتند از CORAL ، SYMPL ، زبان برنامه نویسی فضایی (SPL) و تا حدودی CMS-2 . [12] یک زیر مجموعه تعاملی از JOVIAL به نام TINT، شبیه به JOSS در دهه 1960 توسعه یافت. [7]
JOVIAL شامل ویژگیهایی است که در ALGOL استاندارد یافت نمیشوند، مانند آیتمها (که اکنون ساختارها نامیده میشوند )، آرایههای آیتمها، متغیرهای وضعیت (اکنون شمارشها نامیده میشوند ) و زبان اسمبلی درون خطی . [13]
همچنین شامل مقرراتی برای داده های "بسته بندی شده" در جداول بود. بسته بندی جدول به تخصیص اقلام در یک ورودی به کلمات ذخیره سازی (بیت ها در یک واحد داده) اشاره دارد. این با توجه به حافظه محدود و ذخیره سازی سیستم های محاسباتی در دوره JOVIAL مهم بود.
Communication Pool (COMPOOL) در Jovial شبیه کتابخانه های فایل های سرصفحه برای زبان هایی مانند PL/I و C است.
سیستم های قابل توجه با استفاده از نرم افزار جاسازی شده JOVIAL عبارتند از:
مثال زیر از کتابچه راهنمای برنامه نویسی کامپیوتر برای زبان JOVIAL (J73) گرفته شده است. [3] : 12
PROC RETRIEVE(CODE:VALUE); شروع کنید کد مورد U; مقدار مورد F; VALUE = -99999.; برای I: 0 در 1 در حالی که I<1000; IF CODE = TABCODE(I); شروع کنید VALUE = TABVALUE(I); خروج؛ پایان پایان
این مثال رویه ای به نام را تعریف می کند RETRIEVE
که یک آرگومان ورودی عدد صحیح بدون علامت CODE
و یک آرگومان خروجی ممیز شناور را می گیرد VALUE
. آرایه 1000 عنصری را TABCODE
برای ورودی منطبق جستجو میکند CODE
و سپس متغیر ممیز شناور را VALUE
روی عنصر آرایه TABVALUE
با شاخص آرایه منطبق یکسان تنظیم میکند. اگر عنصر منطبقی یافت نشد، VALUE
روی تنظیم می شود −99999.0
.