سی‌ام‌اس-۲ (زبان برنامه‌نویسی)
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 در زیر آمده‌اند. عملگرهای ویژه ارجاع به ساختارهای داده و عملیات بر روی آن‌ها را تسهیل می‌کند. بخش‌های پویا توصیف کنندهٔ عملیات پردازش یک برنامه دسته‌بندی شده را به بلوک‌های بخش‌هایی به نام متدها هستند. ورودی/خروجی بخش‌ها ارتباط با دستگاه‌های سخت‌افزاری را در حالی که در محیط غیر بلادرنگ در یک سیستم نظارتی در حال اجرا است را مهیا می‌کند. سیستم نظارت کامپایلر 2 (CMS-2) یک سیستم بود که بر روی UNIVAC CP-642B (AN/USQ-20) اجرا شد. نرم‌افزار سیستم شامل مانیتور، کامپایلر، بارکنندهٔ کتابخانهٔ CP-642 و نوار ابزار و فلوچارت بود.
یک سیستم عامل پردازش دسته‌ای که که اجرای اجزاء CMS-2 و کارهای اجرا شدهٔ کاربر در کامپیوتر CP-642 را کنترل می‌کند. ورودی و خروجی، نرم‌افزار امکانات کتابخانه و ابزارهای اشکال‌زدایی را فراهم می‌کند. کار حسابداری نیز ارائه شده‌است.
یک کامپایلر برای CS-1 و زبان CMS-2 که تولیدکنندهٔ کد هدف برای کامپیوترهای CP-642, L-304, AN/UYK-7,1830A و ۱۲۱۸/۱۲۱۹ است. در طول دهه ۱۹۷۰ نسخه‌های مختلف کامپایلر CMS-2 وجود داشت که بسته به کامپیوتر مورد استفاده، برای کامپایل مورد استفاده قرار می‌گرفت. قسمتی از کد منبع باید بازنویسی می‌شد تا برای اجرای بعضی توابع به کار آیند؛ و نسخه‌های مختلف CMS-2 مشکلاتی با ابزار اشکال زدایی داشتند.
کامپایلر توسعه یافتهٔ CMS-2 با اضافه کردن ویژگی‌های زبان برای کامپیوتر AN/UYK-7 است و تنها کد هدف AN/UYK-7 را تولید می‌کند.
یک سیستم مدیریتی است که ذخیره‌سازی و دسترسی به منبع و کد هدف را فراهم می‌کند.
دو بارکنندهٔ کد هدف برای بارگذاری کد هدف مطلق یا جابه‌جا پذیر.
مجموعه‌ای از ابزارها برای مدیریت داده‌ها بر روی نوار مغناطیسی است.
نرم‌افزار فلوچارت ساز بخش‌های فلوچارت ساز را در کد منبع CMS-2 پردازش می‌کند و خروجی آن یک فلوچارت است که به یک چاپگر سرعت بالا فرستاده می‌شود.