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

بلیس یک زبان برنامه نویسی سیستم است که در دانشگاه کارنگی ملون توسط W.A.Wulf ,دی بی‌راسل و ای ان هابرمن در سال ۱۹۷۰ ایجاد شد. شاید بلیس بهترین زبان برنامه نویسی سیستم شناخته شده تا شروع به کار کردن زبان سی بود. از آن پس سی رونق گرفت و بلیس کمرنگ شد. هنگامی که سی در نخستین دوره رشدش بود در آزمایشگاه بل در تعدادی پروژه درباره شایستگی بلیس در مقابل سی بحث شد.
بلیس یک زبان بدون نوع و ساختار بلوکی است که بر پایه عبارات است نه دستورات؛ و شامل سازنده‌هایی برای اداره استثناء، کروتین هاو ماکرو هااست.
نام این زبان در زمان‌های گوناگون کوتاه شده "Basic Language for Implementation of System Software" (زبان پایه برای اجرای نرم‌افزار سیستم) یا "System Software Implementing Language Backwards" است.
DEC کامپایلرهایی برای BLISS برای PDP-10, PDP-11 , VAX , DEC PRISM , MIPS , DEC Alpha , Intel IA-32 ایجاد کرد و از آن در خانه در دهه ۱۹۸۰ به صورت گسترده استفاده شد. اکثر برنامه‌های سودمند برای سیستم عامل VMS به زبان BLISS-32 نوشته شده بود.
توضیحات زبان
بلیس بسیاری از ویژگی‌های زبان‌های سطخ بالای دیگر را دارد. این زبان دارای ساختار بلوک، یک پشته خودکار و مکانیزمی برای فراخوانی روال‌های بازگشتی است.
از طرف دیگر بلیس بعضی ویژگی‌های دیگر زبان‌های سطح بالا را حذف کرد. مثلا دارای امکانات درونی برای ورودی /خروجی نیست. زیرا معمولا یک پروژه نرم‌افزار سیستم ورودی/خروجی خودش را ایجاد می‌کند یا روی مانیتور اصلی ورودی/خروجی یا سرویس‌های مدیریتی صفحه نمایش می‌سازد. بلیس مشخصاتی دارد که در میان زبان‌های سطح بالا غیرمعمول است. یک نام به عنوان آدرس آن بخش تفسیر می‌شود تا مقدار آن بخش. همچنین بلیس یک زبان عبارتی است نه یک زبان دستوری.
این بدان معناست که هر ساختار زبان که تعریف نشده است یک عبارت است. عبارات یک مقدار را تولید می‌کنند و احتمالا باعث یک عمل مانند تغییر حافظه ، انتقال کنترل یا اجرای یک حلقه برنامه می‌شود. برای مثال نقطه مقابل یک دستور تخصیص در بلیس، یک عبارت است که خودش مقدار دارد. مقدار یک عبارت در بلیس می‌تواند استفاده شود یا دور اتداخته شود. در نهایت بلیس شامل امکانات ماکرو است که یک سطح از توانایی که غالبا فقط در ماکرو-اسمبلرها استفاده می‌شود را فراهم می‌کند.
بلیس دارای مشخصات زیر است:
همه ثابت‌ها واژه کامل هستند که برای ماشبن استفاده می‌شوند. برای مثال در ماشین ۱۶ بیتی مثل PDP-11 یک ثابت ۱۶ بیت است، در کامپیوتر VAX ثابت‌ها ۳۲ بیتی هستند و در PDP-10 همه ۳۶ بیتی هستند.
رجوع به متغیر همیشه به آدرس آن متغیر است. برای مثال دستورالعمل به آدرس Z، هشت تا اضافه می‌کند و نه به مقدار آن. اگر نیاز به اضافه کردن ۸ تا به مقدار z بود باید یک پیشوند نقطه به متغیر اضافه کنیم. پس برای اجرای این دستور باید به صورت نوشته شود که ۸ را به مقدار z اضافه می‌کند.
تخصیص با نماد = صورت می‌گیرد. مثلا که یک ثابت با محتوای ۸ تولید می‌کند و آن را در محلی که مرتبط به آدرس Z است ذخیره می‌کند؛ بنابراین می‌توانیم چیزی مانند را انجام دهیم که ثابت ۱۴ را در محلی که آدرس آن ۱۲ تا بیشتر از محل Z است قرار می‌دهد.
بلوک دستورها مانند چیزی است که در الگول وجود دارد. یک بلوک با عبارت BEGIN شروع می‌شود و با عبارت END خاتمه می‌یابدو مثل الگول دستورها با؛ خاتمه می‌یابند. در روش دیگر پرانتز باز می‌تواند برای شروع بلوک و پرانتز بسته برای انتهای آن استفاده شود. وقتی که پرانتزها حاوی یک عبارت هستند قانون اولویت‌ها به کار گرفته می‌شود که در آن عبارت‌های داخل پرانتز اول محاسبه می‌شوند.
دستورات شرطی عبارت IF را اسنفاده می‌کنند که حالت صحیح /غلط را امتحان می‌کنند، اعمال متناوبی انجام می‌دهند و یک نتیجه باز می‌گردانند.
مقایسه از لغت کلیدی برای برابری، برای بزرگتری و برای نابرابری استفاده می‌کند. برای مثال کد زیر مقدار خالص z را برابر با آدرس نشان داده شده توسط Q قرار می‌دهد:
Q = (IF .Z GTR 0 THEN .Z ELSE -.Z);
شناسه‌ها (متغیرها و ثوابت) باید قبل ازاستفاده با استفاده از لغت کلیدی تعریف شده باشند. تعریف کردن معمولی یک متغیر باعث می‌شود تا کامپایلر برای آن، فضا تخصیص دهد. در مواقع ضروری یک متغیر ممکن است برابر با یک ماشین آدرس با تعریف قرار گیرد. این ویژگی در درجه اول برای دسترسی ثبات دستگاه و هم آدرس‌های مشخص خاص استفاده می‌شود.
زیرروال‌ها در زبان، روال خوانده می‌شوند و با کلمه کلیدی ROUTINE تعریف می‌شوند.
ماکروها که برای جایگزینی متن اجازه می‌دهند با کلمه کلیدی MACRO تعریف می‌شوند.
این زبان آرایه‌ها را پشتیبانی می‌کند با کلمه کلیدی VECTOR تعریف می‌شوند.
این زبان بعضی سازنده‌های برنامه نویسی سطح بالا را پشتیبانی می‌کند. مانند:
مسیرهای اجرایی جایگزین توسط عبارت CASE
حلقه‌ها از طریق استفاده INCR، که مانند عبارت FOR در الگول است.
تابع‌های رشته‌ای
تبدیل داده (عدد به رشته و…)
مثال
MODULE E1 (MAIN = CTRL) =
BEGIN
FORWARD ROUTINE
CTRL,
STEP;
ROUTINE CTRL =
This routine inputs a value, operates on it, and
then outputs the result.
BEGIN
EXTERNAL ROUTINE
GETNUM,! Input a number from terminal
PUTNUM;! Output a number to terminal
LOCAL
X,! Storage for input value
Y;! Storage for output value
GETNUM(X);
Y = STEP(.X);
PUTNUM(.Y)
END;
ROUTINE STEP(A) =
This routine adds 1 to the given value.
(.A+1);
END
ELUDOM
نسخه‌های زبان برنامه نویسی بلیس
BLISS-10
BLISS-11
BLISS-16
BLISS-16C
BLISS-32
BLISS-64
Common BLISS