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

CMS-2 یک زبان برنامه‌نویسی سیستم‌های جاسازی شده است که به وسیله نیروی دریایی ایالات متحده استفاده شده است. آن اوایل تلاش به منظور توسعه یک زبان برنامه‌نویسی کامپیوتری سطح بالای استاندارد شده برای بهبود کد قابل حمل و استفاده مجدد انجام می‌شد. CMS-2 درجه اول برای سیستم‌های داده‌های تاکتیکی نیروی دریایی ایالات متحده توسعه یافت. (NTDS).
CMS-2 توسط شرکت رند در اوایل دهه ۱۹۷۰ توسعه داده شد و مخفف "سیستم نظارت کامپایلر" است. بعد از نام "CMS-2" یک حرف قرار می‌گیرد که تعیین کننده نوع سیستم هدف است. برای مثال CMS_2M پردازنده‌های ۱۶ بیتی نیروی دریایی را هدف قرار می‌دهد، مانند /AYK-14.
تاریخچه
CMS-2 برای FCPCPAC (ناوگان برنامه‌نویسی کامپیوتر مرکز اقیانوس آرام) در San Diego,CA توسعه داده شد و توسط تشکیلات علوم کامپیوتر در سال ۱۹۶۸ با کمک طراحی از Intermetrics پیاده‌سازی شد. این زبان ادامه پیدا کرد تا مورد توسعه قرار گرد و در نهایت تعدادی از کامپیوترها را پشتیبانی کرد از جمله کامپیوترهای AN/UYK-7 و AN/UYK-43 و UYK-20 و UYK-44.
ویژگی‌های زبان
CMS-2 برای تشویق برنامه ماژولار، اجازه کامپایل مستقل بخش‌های یک سیستم کامل طراحی شد. این زبان توضیح گرا است. منبع به شکل آزاد است و ممکن است برای برنامه‌نویسی راحت سازماندهی شود. انواع داده‌ها شامل اعداد ثابت، اعداد ممیز شناور، بولی، حروف و وضعیت است. ارجاع مستقیم، دستکاری حروف و رشته‌های بیتی مجاز است. کد نمادین دستگاه ممکن است شامل کدی به عنوان کد مستقیم باشد.
ساختار برنامه
یک برنامه CMS-2 تشکیل شده از بخش‌ها است. بخش‌ها ساخته شده از نمادها هستند که به وسیله یک جداکننده از هم جدا شده‌اند. این دسته از نمادها عبارتند از عملگرها، شناسه‌ها و ثابت‌ها. عملگرها شکل‌های اولیه زبان هستند که به وسیله کامپایلر برای یک عمل خاص یا تعریفی خاص در یک برنامه اختصاص داده شده‌اند. شناسه‌ها نام‌های منحصر به فردی هستند که توسط برنامه‌نویس برای داده‌های بخش‌ها، عناصر برنامه و برچسب‌های بخش تخصیص می‌یابند. ثابت‌ها مقدارهای مشخص شده‌ای هستند که ممکن است عددی، رشته‌های Hollerith، مقدارهای وضعیت‌ها یا بولی باشد.
بخش‌های CMS-2 به شکل آزاد هستند و با یک علامت دلار خاتمه می‌یابند. یک برچسب بخش ممکن است در ابتدای توضیحات برای ارجاع به آن قرار داده شود.
یک برنامه منبع CMS-2 از دو نوع توضیحات تشکیل شده است. بخش‌های اعلانی اطلاعات کنترلی اساسی را برای کامپایلر محیا می‌کند و ساختار داده‌های مرتبط با یک برنامه خاص را تعریف می‌کند. بخش‌های پویا باعث می‌شوند که کامپایلر دستورالعمل‌های اجرایی دستگاه را تولید کند.
بخش‌های اعلانی که داده‌ها را برای یک برنامه تعریف می‌کنند در واحدهایی دسته‌بندی می‌شوند که طراحی‌های داده‌ها نامیده می‌شوند. طراحی‌های داده‌ها متشکل از تعریف‌های دقیق برای مناطق ذخیره‌سازی داده‌های موقتی و دائم، ورودی‌ها، خروجی‌ها و واحدهای خاص داده‌ها است. بخش‌های پویا که بر روی داده‌ها عمل می‌کنند ویا محاسبات را انجام می‌دهند به صورت متدها دسته‌بندی می‌شوند. طراحی‌های داده و متدها بار دیگر به صورت عناصر سیستم یک برنامه CMS-2 دسته‌بندی می‌شوند.کامپایلر عناصر سیستم را به یک سیستم زمان کامپایل ترکیب می‌کند. یک سیستم زمان کامپایل مکن است مستقل یا بخشی از برنامه بزرگتر باشد.
بخش‌های اعلانی داده‌ها
بخش‌های اعلانی داده‌ها اطلاعات مربوط به تعریف عناصر داده‌ها را در اختیار کامپایلر قرار می‌دهد. آن‌ها فرمت، ساختار و ترتیب عناصر را در یک سیستم زمان کامپایل تعریف می‌کنند. سه نوع اصلی داده‌ها عبارت اند از متغیرها، سوئیچ‌ها و مجموعه‌ها.
سوئیچ‌ها
سوئیچ‌ها برای انتقال کنترل برنامه به یک مکان خاص در سیستم زمان کامپایل مورد استفاده قرار می‌گیرند. آن‌ها شامل یک مجموعه از شناسه‌ها یا نقاط سوئیچ کردن هستند که انتقالات برنامه و شاخه‌ها را تسهیل می‌کنند. سوئیچ آدرس برنامه یک برچسب بخش یا نام متد را نشان می‌دهد.
متغیرها
یک متغیر یک تکه از داده‌ها است. ممکن است شامل یک بیت، چندین بیت یا چندین کلمه باشد. ممکن است یک مقداری در زمان تعریف متغیر به آن اختصاص داده شود. متغیرها ممکن است یک مقدار ثابت یا یک مقدار قابل تغییر را در خود نگه دارند. انواع داده شامل اینتیجر، اعداد ممیز شناور، اعداد ثابت، رشته‌های حروف Hollerith، وضعیت یا بولی باشند.
مجموعه‌ها
جدول‌ها مجموعه‌های مرتب اطلاعات ساخت یافته یکسان را نگه می‌دارد. واحد متداول داده‌ها در یک جدول یک آیتم است. آیتم‌ها ممکن است به فیلدها تقسیم شوند که کوچکترین قسمت یک جدول هستند. نوع داده‌های مجاز در فیلدها عبارتند از اینتیجر، اعداد ثابت، اعداد ممیز شناور، رشته‌های حروف Hollerith، وضعیت یا بولی. یک آرایه یک توسعه از مفهوم جدول است. واحد ساختاری اصلی یک آرایه، آیتم است. آیتم‌های آرایه شامل فیلدهایی است که با برنامه‌نویس تعریف می‌شوند.
بخش‌های پویا
بخش‌های پویا عملیات پردازشی را مشخص می‌کنند و در نتیجه کد اجرایی را به وسیله کامپایلر تولید می‌کننند. یک بخش پویا شامل یک عملگر است که به وسیله یک لیست از عملوندها و عملگرهای اضافی‌ای تعیب می‌شود. یک عملوند ممکن است یک نام تنها، یک ثابت، یک ارجاع به عناصر داده یا یک عبارت باشد.
عملگرهای بخش
عملگرهای اصلی CMS-2 در زیر آمده‌اند.
عملگر
نقش
SET
محاسبات را انجام می‌دهد یا برای تخصیص مقدار استفاده می‌شود
SWAP
محتوای دو واحد داده را جابه‌جا می‌کند
GOTO
جریان اجرایی یک برنامه را تعییر می‌دهد یا یک بخش سوئیچ را صدا می‌زند
IF
یک مقایسه یا عبارت بولی را برای اجرای شرطی بیان می‌کند
VARY
یک چرخه برنامه را ایجاد می‌کند
FIND
یک جدول را برای داده‌ای جستجو می‌کند
عملگرهای ویژه
عملگرهای ویژه ارجاع به ساختارهای داده و عملیات بر روی آنها را تسهیل می‌کند.
اپراتور
تابع
BIT
به یک رشته از بیت‌ها در یک عنصر داده ارجاع می‌دهد
CHAR
به یک رشته کاراکتر ارجاع می‌دهد
CORAD
به یک آدرس هسته ارجاع می‌دهد
ABS
مقدار مطلق یک عبارت را به دست می‌آورد
COMP
مکمل یک عبارت بولی
برنامه ساختار اعلان‌ها
بخشهای پویا توصیف کننده عملیات پردازش یک برنامه دسته‌بندی شده را به بلوک‌های بخش‌هایی به نام متدها هستند.
آغاز حائل
پایان حائل
هدف
سیستم
پایان-سیستم
یک سیستم زمان کامپایل را حائل می‌شود
SYS-DD
پایان-SYS-DD
Delimits یک سیستم طراحی داده در سیستم کامپایل شده
SYS-مجموعه مقالات
پایان-SYS-مجموعه مقالات
Delimits یک سیستم متدی در یک سیستم زمان کامپایل
LOC-DD
پایان-LOC-DD
Delimits محلی طراحی داده‌ها در یک سیستم روش
روش
پایان-مجموعه مقالات
Delimits یک متد در یک متد سیستم
EXEC-مجموعه مقالات
پایان-مجموعه مقالات
Delimits یک روش وظیفه-حالت در یک متد سیستم(XCMS-2 تنها، تنها به نام از اجرایی-دولت روش)
تابع
END-FUNCTION
Delimits یک تابع در متد سیستم
SYS-PROC-REN
پایان-SYS-PROC
Delimits یک متد سیستم reentrant در یک سیستم زمان کامپایل(XCMS-2)
AUTO-DD
پایان-AUTO-DD
Delimits ناحیه داده پویا در یک متد سیستم reentrant است که باید هر دفعه اختصاص داده شود. متد سیستم reentrant برای اجرا آغاز می‌شود (XCMS-2)
HEAD
END-HEAD
Delimits یک بسته هدر در یک سیستم زمان کامپایل
ورودی/خروجی سطح بالای بخش‌ها
ورودی/خروجی بخش‌ها ارتباط با دستگاه‌های سخت‌افزاری را در حالی که در محیط غیر بلادرنگ در یک سیستم نظارتی درحال اجرا است را مهیا می‌کند.
عملگر
تابع
FILE
محیط و بقیه اطلاعات مورد نیاز برای یک ورودی و خروجی را تعریف می‌کند
OPEN
کارهای عادی I/O را مقداردهی اولیه می‌کند
CLOSE
یک فایل را غیرفعال می‌کند و علامت پایان فایل را می‌نویسد
INPUT
یک عمل ورودی را از یک دستگاه خارجی به یک قسمت میانگیر فایل هدایت می‌کند
OUTPUT
یک عمل خروجی را از یک قسمت میانگیر فایل به یک دستگاه خروجی هدایت می‌کند
FORMAT
تبدیل دلخواه بین بلوک‌های داده خارجی و تعریف‌های داده داخلی را مشخص می‌کند
ENCODE
عناصر داده را به یک قسمت خاص منتقل می‌کند که این انتقال با یک فرمت خاص تطبیق می‌کند.
DECODE
عملیات عکس ENCODE
ENDFILE
یک نشانه پایان فایل مناسب را قرار می‌دهد
POS
عملگر ویژه برای قراردادن یک نوار فایل مغناطیسی
LENGHT
عملگر ویژه برای به دست آوردن طول یک ورودی/خروجی
سیستم نظارت کامپایلر 2 (CMS-2)
سیستم نظارت کامپایلر 2 (CMS-2) یک سیستم بود که بر روی UNIVAC CP-642B (AN/USQ-20) اجرا شد. نرم‌افزار سیستم شامل مانیتور، کامپایلر، بارکننده کتابخانه CP-642 و نوار ابزار و فلوچارت بود.
مانیتور MS-2
یک سیستم عامل پردازش دسته‌ای که که اجرای اجزاء CMS-2 و کارهای اجرا شده کاربر در کامپیوتر CP-642 را کنترل می‌کند. ورودی/خروجی، نرم‌افزار امکانات کتابخانه و ابزارهای اشکال‌زدایی را فراهم می‌کند. کار حسابداری نیز ارائه شده است.
کامپایلر CMS-2
یک کامپایلر برای CS-1 و زبان CMS-2 که تولیدکننده کد هدف برای کامپیوترهای CP-642, L-304, AN/UYK-7,1830A و ۱۲۱۸/۱۲۱۹ است. در طول دهه ۱۹۷۰ نسخه‌های مختلف کامپایلر CMS-2 وجود داشت که بسته به کامپیوتر مورد استفاده، برای کامپایل مورد استفاده قرار می‌گرفت. قسمتی از کد منبع باید بازنویسی می‌شد تا برای اجرای بعضی توابع به کار آیند؛ و نسخه‌های مختلف CMS-2 مشکلاتی با ابزار اشکال زدایی داشتند.
کامپایلر XCMS-2
کامپایلر توسعه یافته CMS-2 با اضافه کردن ویژگی‌های زبان برای کامپیوتر AN/UYK-7 است و تنها کد هدف AN/UYK-7 را تولید می‌کند.
کتابخانه CMS-2
یک سیستم مدیریتی است که ذخیره‌سازی و دسترسی به منبع و کد هدف را فراهم می‌کند.
بار کننده کد هدف CP-642
دو بارکننده کد هدف برای بارگذاری کد هدف مطلق یا جابه‌جا پذیر.
نوار ابزار
مجموعه‌ای از ابزارها برای مدیریت داده‌ها بر روی نوار مغناطیسی است.
فلوچارت ساز CMS-2
نرم‌افزار فلوچارت ساز بخش‌های فلوچارت ساز را در کد منبع CMS-2 پردازش می‌کند و خروجی آن یک فلوچارت است که به یک چاپگر سرعت بالا فرستاده می‌شود.
Ada
AN/AYK-14
AN/UYK-7
AN/UYK-20
AN/UYK-43
AN/UYK-44
AN/USQ-17
AN/USQ-20
JOVIAL
Naval Tactical Data System
TACPOL