پارادایم برنامهنویسی | Procedural, imperative, structured |
---|---|
خانواده | ALGOL |
طراحی شده توسط | System Development Corporation |
توسعهدهنده | Software Engineering Associates[۱] |
ظهوریافته در | ۱۹۶۰ |
static, strong, safe, structural | |
دامنه | Lexical |
پیادهسازیهای بزرگ | |
MVS, OpenVMS, macOS, Windows, Linux, SPARC, PowerPC, MIL-STD-1750A, other legacy systems | |
گویش | |
J3, J3B-2, J73 | |
متأثر از | |
ALGOL, SAGE | |
تأثیر گذاشته بر | |
CMS-2, Coral 66, SYMPL |
JOVIAL یک زبان برنامهنویسی سطح بالا است که بر اساس ALGOL 58 طراحی شده و برای توسعه سیستمهای تعبیهشده تخصیص یافته است (سیستمهای کامپیوتری تخصصی که برای انجام یک یا چند وظیفه اختصاصی طراحی شدهاند و معمولاً به عنوان بخشی از یک دستگاه بزرگتر و کاملتر که شامل قطعات مکانیکی نیز میشود، تعبیه میشوند). این زبان یک زبان برنامهنویسی سیستم اصلی و مهم در دهههای ۱۹۶۰ و ۱۹۷۰ بود.[۲]
JOVIAL به عنوان یک زبان برنامهنویسی "سطح بالا"[۳]: 1 و جدید از سال ۱۹۵۹ توسط تیمی در شرکت توسعه سیستم (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 استفاده میکنند شامل:
مثال زیر از کتابچه راهنمای برنامهنویسی کامپیوتری برای زبان JOVIAL (J73)[۳]: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
این مثال یک رویه به نام RETRIEVE
را تعریف میکند که یک آرگومان ورودی به نام CODE
به صورت عدد بدون علامت و یک آرگومان خروجی به نام VALUE
به صورت عدد اعشاری دارد. این رویه در آرایه 1000 عضوی TABCODE
جستجو میکند تا ورودیای پیدا کند که با CODE
مطابقت داشته باشد، سپس متغیر اعشاری VALUE
را به عنصر TABVALUE
با شاخص آرایه مشابه تنظیم میکند. اگر عنصر مطابقتی پیدا نشود، مقدار VALUE
به 99999.0-
تنظیم میشود.