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

بلیس بسیاری از ویژگی‌های زبان‌های سطخ بالای دیگر را دارد. این زبان دارای ساختار بلوک، یک پشتهٔ خودکار و مکانیزمی برای فراخوانی روال‌های بازگشتی است.
از طرف دیگر بلیس بعضی ویژگی‌های دیگر زبان‌های سطح بالا را حذف کرد؛ مثلاً دارای امکانات درونی برای ورودی /خروجی نیست؛ زیرا معمولاً یک پروژهٔ نرم‌افزار سیستم ورودی/خروجی خودش را ایجاد می‌کند یا روی مانیتور اصلی ورودی/خروجی یا سرویس‌های مدیریتی صفحه نمایش می‌سازد. بلیس مشخصاتی دارد که در میان زبان‌های سطح بالا غیرمعمول است. یک نام به عنوان آدرس آن بخش تفسیر می‌شود تا مقدار آن بخش. همچنین بلیس یک زبان عبارتی است نه یک زبان دستوری.
این بدان معناست که هر ساختار زبان که تعریف نشده‌است یک عبارت است. عبارات یک مقدار را تولید می‌کنند و احتمالاً باعث یک عمل مانند تغییر حافظه ، انتقال کنترل یا اجرای یک حلقهٔ برنامه می‌شود. برای مثال نقطهٔ مقابل یک دستور تخصیص در بلیس، یک عبارت است که خودش مقدار دارد. مقدار یک عبارت در بلیس می‌تواند استفاده شود یا دور اتداخته شود. در نهایت بلیس شامل امکانات ماکرو است که یک سطح از توانایی که غالباً فقط در ماکرو-اسمبلرها استفاده می‌شود را فراهم می‌کند.

بلیس دارای مشخصات زیر است:
همهٔ ثابت‌ها واژهٔ کامل هستند که برای ماشبن استفاده می‌شوند. برای مثال در ماشین ۱۶ بیتی مثل PDP-11 یک ثابت ۱۶ بیت است، در کامپیوتر VAX ثابت‌ها ۳۲ بیتی هستند و در PDP-10 همه ۳۶ بیتی هستند.
رجوع به متغیر همیشه به آدرس آن متغیر است. برای مثال دستورالعمل  Z+8 به آدرس Z، هشت تا اضافه می‌کند و نه به مقدار آن. اگر نیاز به اضافه کردن ۸ تا به مقدار z بود باید یک پیشوند نقطه به متغیر اضافه کنیم. پس برای اجرای این دستور باید به صورت  .Z+8 نوشته شود که ۸ را به مقدار z اضافه می‌کند.
تخصیص با نماد = صورت می‌گیرد؛ مثلاً  Z=8 که یک ثابت با محتوای ۸ تولید می‌کند و آن را در محلی که مرتبط به آدرس Z است ذخیره می‌کند؛ بنابراین می‌توانیم چیزی مانند  Z+12=14 را انجام دهیم که ثابت ۱۴ را در محلی که آدرس آن ۱۲ تا بیشتر از محل Z است قرار می‌دهد.
بلوک دستورها مانند چیزی است که در الگول وجود دارد. یک بلوک با عبارت BEGIN شروع می‌شود و با عبارت END خاتمه می یابدو مثل الگول دستورها با؛ خاتمه می‌یابند. در روش دیگر پرانتز باز می‌تواند برای شروع بلوک و پرانتز بسته برای انتهای آن استفاده شود. وقتی که پرانتزها حاوی یک عبارت هستند قانون اولویت‌ها به کار گرفته می‌شود که در آن عبارت‌های داخل پرانتز اول محاسبه می‌شوند.
دستورات شرطی عبارت IF را اسنفاده می‌کنند که حالت صحیح /غلط را امتحان می‌کنند، اعمال متناوبی انجام می‌دهند و یک نتیجه بازمی‌گردانند.
مقایسه از لغت کلیدی EQL برای برابری، GTR برای بزرگتری و NEQ برای نابرابری استفاده می‌کند. برای مثال کد زیر مقدار خالص z را برابر با آدرس نشان داده شده توسط Q قرار می‌دهد:
Q = (IF .Z GTR 0 THEN .Z ELSE -.Z);
شناسه‌ها (متغیرها و ثوابت) باید قبل ازاستفاده با استفاده از لغت کلیدی OWN تعریف شده باشند. تعریف کردن معمولی یک متغیر باعث می‌شود تا کامپایلر برای آن، فضا تخصیص دهد. در مواقع ضروری یک متغیر ممکن است برابر با یک ماشین آدرس با تعریف BIND قرار گیرد. این ویژگی در درجهٔ اول برای دسترسی ثبات دستگاه و هم آدرس‌های مشخص خاص استفاده می‌شود.
زیرروال‌ها در زبان، روال خوانده می‌شوند و با کلمهٔ کلیدی ROUTINE تعریف می‌شوند.
ماکروها که برای جایگزینی متن اجازه می‌دهند با کلمهٔ کلیدی MACRO تعریف می‌شوند.
این زبان آرایه‌ها را پشتیبانی می‌کند با کلمهٔ کلیدی VECTOR تعریف می‌شوند.
این زبان بعضی سازنده‌های برنامه‌نویسی سطح بالا را پشتیبانی می‌کند. مانند:
مسیرهای اجرایی جایگزین توسط عبارت CASE
حلقه‌ها از طریق استفادهٔ INCR، که مانند عبارت FOR در الگول است.
تابع‌های رشته‌ای
تبدیل داده (عدد به رشته و…)