النعيم

BLISS هي لغة برمجة نظام تم تطويرها في جامعة كارنيجي ميلون (CMU) بواسطة WA Wulf و DB Russell و AN Habermann حوالي عام 1970. وربما كانت لغة النظام الأكثر شهرة حتى ظهرت لغة C بعد بضع سنوات، وبعد ذلك أصبحت لغة C شائعة واختفت BLISS في طي النسيان.

لغة BLISS هي لغة برمجة هيكلية تعتمد على الكتل دون تحديد نوع البيانات ، وتعتمد على التعبيرات بدلاً من العبارات، وتتضمن بنيات لمعالجة الاستثناءات ، والروتينات الفرعية ، والماكرو . وهي لا تتضمن عبارة goto .

يُقال إن الاسم اختصار لعبارة " اللغة الأساسية لتنفيذ برمجيات النظام" أو "لغة تنفيذ برمجيات النظام، بالعكس" . ومع ذلك، في روايته الشفوية عام 2015 لمشروع تاريخ أمن الحاسوب التابع لمعهد باباج، ادعى وولف أن الاختصار كان في الأصل مبنيًا على اسم "لغة بيل لتنفيذ برمجيات النظام". [ 1 ]

كان المترجم الأصلي لجامعة كارنيجي ميلون مميزًا باستخدامه المكثف للتحسينات ، وشكل أساس الكتاب الكلاسيكي " تصميم المترجم الأمثل" .

قامت شركة ديجيتال إكويبمنت (DEC) بتطوير وصيانة مُجمِّعات لغة BLISS لأجهزة PDP-10 ، [ 2 ] و PDP-11 ، [ 2 ] وVAX ، [ 2 ] و DEC PRISM ، [ 3 ] وMIPS ، [ 2 ] و DEC Alpha ، [ 2 ] وIntel IA-32 . [ 2 ] لم تحظَ اللغة بشعبية واسعة بين العملاء، وكان عدد قليل منهم يمتلك المُجمِّع، [ 4 ] لكن شركة DEC استخدمتها بكثافة داخليًا حتى ثمانينيات القرن الماضي؛ حيث كُتبت معظم برامج الأدوات المساعدة لنظام التشغيل OpenVMS بلغة BLISS-32. وقد نُقل مُجمِّع DEC BLISS إلى معماريتي IA-64 و x86-64 كجزء من عمليات نقل OpenVMS إلى هاتين المنصتين. [ 2 ] [ 5 ] يستخدم مترجم x86-64 BLISS LLVM كمولد كود خلفي له ، ليحل محل الواجهة الخلفية GEM الخاصة المستخدمة في Alpha و IA-64.

وصف اللغة

تتمتع لغة BLISS بالعديد من خصائص لغات البرمجة الحديثة عالية المستوى. فهي تتميز ببنية كتلية، ومكدس تلقائي، وآليات لتعريف واستدعاء الإجراءات التكرارية  ... كما توفر مجموعة متنوعة من هياكل البيانات المُعرّفة مسبقًا  ... وتسهيلات للاختبار والتكرار  ... من ناحية أخرى، تفتقر BLISS إلى بعض خصائص لغات البرمجة عالية المستوى الأخرى. فهي لا تحتوي على تسهيلات مُدمجة للإدخال/الإخراج، لأن مشاريع برمجيات النظام عادةً ما تُطوّر تسهيلات الإدخال/الإخراج الخاصة بها أو تعتمد على خدمات الإدخال/الإخراج الأساسية للشاشة أو خدمات إدارة الشاشة  ... كما أنها تسمح بالوصول إلى خصائص خاصة بالجهاز، لأن برمجيات النظام غالبًا ما تتطلب ذلك. تتميز BLISS بخصائص غير مألوفة بين لغات البرمجة عالية المستوى. يُفسّر الاسم  ... بشكل موحد على أنه عنوان ذلك الجزء وليس قيمته  ... كذلك، تُعتبر BLISS "لغة تعبير" وليست "لغة عبارات". [ 6 ]

تتميز لغة BLISS بالخصائص التالية:

  • جميع الثوابت هي كلمة كاملة للجهاز المستخدم، على سبيل المثال في جهاز 16 بت مثل PDP-11 ، يكون الثابت 16 بت؛ في جهاز كمبيوتر VAX ، تكون الثوابت 32 بت، وفي PDP-10 ، يكون الثابت 36 بت.
  • يشير المرجع إلى متغير دائمًا إلى عنوان ذلك المتغير. على سبيل المثال، تشير التعليمات Z+8إلى إضافة 8 إلى عنوان المتغير Z، وليس إلى قيمته . إذا أردنا إضافة 8 إلى قيمة Z، يجب وضع نقطة قبل اسم المتغير؛ لذا نكتب الأمر التالي .Z+8لتنفيذ هذه الوظيفة، التي تضيف 8 إلى محتوى Z.
  • يتم التعيين= باستخدام الرمز القياسي، على سبيل المثال Z=8- والذي يشير إلى إنشاء ثابت كامل الكلمة يحتوي على 8، وتخزينه في الموقع الذي يتوافق عنوانه مع عنوان Z. لذا Z+12=14(أو، بدلاً من ذلك 12+Z=14على الرغم من أن هذه الصيغة تعتبر ممارسة سيئة وفقًا لوثائق BLISS في Digital) يتم وضع الثابت 14 في الموقع الذي يقع بعد 12 كلمة من عنوان Z.
  • تتشابه عبارات الكتل مع تلك الموجودة في لغة ALGOL : تبدأ الكتلة بعبارة BEGINوتنتهي بـ END. وكما هو الحال في ALGOL، تُفصل العبارات بفاصلة منقوطة (";"). عند حساب قيمة، تُحفظ حتى نهاية العبارة التالية - مما يعني أنه يمكن حساب قيمة، وتعيينها لمتغير، ونقلها إلى العبارة التالية، إذا لزم الأمر. بدلاً من ذلك، يمكن استخدام قوس مفتوح لبدء كتلة، مع استخدام قوس مغلق لإغلاقها. عند تضمين الأقواس في تعبير، تُستخدم قواعد الأسبقية القياسية ، حيث تُحسب التعبيرات الموجودة بين قوسين أولاً.
  • يستخدم التنفيذ الشرطيIF التعبير الذي يختبر شرطًا صحيحًا أو خاطئًا، وينفذ إجراءات بديلة، ويعيد نتيجة.
  • تستخدم المقارنة كلمات مفتاحية مثل EQLللمساواة (بدلاً من استخدام رمز = لنفس الغرض)، GTRو للأكبر من، و NEQللأقل من. على سبيل المثال، سيُسند الكود التالي القيمة المطلقة لـ Z إلى العنوان المُشار إليه بـ Q:
Q = (IF .Z GTR 0 THEN .Z ELSE -.Z);
  • يجب تعريف المعرّفات (المتغيرات والثوابت) قبل استخدامها، وعادةً ما يتم ذلك باستخدام OWNالكلمة المفتاحية `input`. يؤدي تعريف المتغير عادةً إلى قيام المُصرّف بتخصيص مساحة له؛ وعند الضرورة، يمكن تعيين عنوان آلة ثابت للمتغير عبر BINDالتعريف. تُستخدم هذه الميزة بشكل أساسي للوصول إلى سجلات الآلة أو عناوين خاصة مُحددة.
  • تُسمى الإجراءات الفرعية في اللغة بالروتينات ، ويتم تعريفها باستخدام الكلمة المفتاحيةROUTINE.
  • يتم تعريف وحدات الماكرو ، التي تسمح باستبدال النصوص، باستخدام الكلمة المفتاحية MACRO.
  • تدعم اللغة المصفوفات ، والتي يشار إليها باسم الهياكل ، ويتم تعريفها باستخدام الكلمة المفتاحية VECTOR.
  • تدعم اللغة بعض بنيات لغات البرمجة عالية المستوى مثل:
    • مسارات تنفيذ بديلة عبر CASEالتعبير
    • يتم استخدام التعبير بشكل متكرر INCR، وهو مشابه لعبارة FOR في لغة ALGOL.
    • دوال السلاسل النصية المدمجة
    • بعض عمليات تحويل البيانات التلقائية (تحويل الرقم إلى سلسلة نصية، وما إلى ذلك).

مثال المصدر

المثال التالي مأخوذ حرفياً من دليل لغة بليس : [ 6 ]

الوحدة E1 (الرئيسية = CTRL) = يبدأ روتين أمامي كنترول، خطوة؛ ROUTINE CTRL = !+ يقوم هذا الروتين بإدخال قيمة، ثم يُجري عليها عملية، و ! ثم يُخرج النتيجة. !- يبدأ الروتين الخارجي GETNUM، ! أدخل رقمًا من الطرفية PUTNUM; ! إخراج رقم إلى الطرفية محلي X، ! تخزين قيمة الإدخال Y؛ ! تخزين قيمة الإخراج GETNUM(X); Y = STEP(.X); PUTNUM(.Y) نهاية؛ الخطوة الروتينية (أ) = !+ ! يضيف هذا الروتين 1 إلى القيمة المعطاة. !- (.A+1)؛ نهاية إيلودوم 

الإصدارات

  • لهجة BLISS-10:
    • BLISS-10 - المترجم الأصلي لجامعة كارنيجي ميلون لجهاز PDP-10
  • لهجة BLISS-11:
  • لهجة BLISS الشائعة (جميع مُجمّعي DEC):
    • BLISS-16 - مُترجم مُتقاطع مُستضاف على نظام VMS لجهاز PDP-11
    • BLISS-16C - مترجم مُستضاف على PDP-10 من مجموعة فرعية من Common BLISS إلى BLISS-11
    • BLISS-32 - مترجم أصلي لنظام VAX/VMS
    • BLISS-36C - مترجم مُستضاف على PDP-10 من مجموعة فرعية من Common BLISS إلى BLISS-10.
    • BLISS-36 - مُترجم أصلي لجهاز PDP-10
    • BLISS-32EN - مترجم أصلي 32 بت لـ Alpha/AXP [ 7 ]
    • BLISS-64EN - مُترجم أصلي 64 بت لنظام التشغيل Alpha/AXP
    • BLISS-32IN - مُترجم أصلي 32 بت لمعالجات IA64
    • BLISS-64IN - مُترجم أصلي 64 بت لمعالجات IA64
    • BLISS-32XN - مُترجم أصلي 32 بت لنظام x86-64
    • BLISS-64XN - مُترجم أصلي 64 بت لأنظمة x86-64

ملحوظات

  1. وولف، ويليام أ. (23 يونيو 2015). "مقابلة مع ويليام أ. وولف" (ملف PDF) (مقابلة). أجراها جيفري ر. يوست. شارلوتسفيل، فيرجينيا.
  2. 1 2 3 4 5 6 7 بريندر، رونالد ف. (2002). "لغة برمجة BLISS: تاريخ" (ملف PDF) . البرمجيات: الممارسة والخبرة . 32 (10): 955-981 . doi : 10.1002/spe.470 . S2CID 45466625 . 
  3. ماكلارين، دون (27 أغسطس 1987). "مشروع مُجمِّع DECWest، الوصف، والخطة" (ملف PDF) . Bitsavers.org .
  4. دا كروز، فرانك (16 سبتمبر 1987). "أخبار حول برامج كيرميت لأنظمة VAX/VMS" . نشرة معلومات كيرميت (قائمة بريدية). مشروع كيرميت، جامعة كولومبيا . تاريخ الاسترجاع: 5 مايو 2019. كُتب برنامج كيرميت-32 بلغة بليس، وهي "لغة التنفيذ المؤسسي" لشركة DEC (طُوّرت في الأصل في جامعة كارنيجي ميلون). لم تحظَ لغة بليس بشعبية بين عملاء DEC؛ فقليل من المواقع لديها مُجمّعات بليس.
  5. "اجتماع مطوري LLVM لعام 2017: ج. ريغان "نقل OpenVMS باستخدام LLVM"" . يوتيوب . 31 أكتوبر 2017. مؤرشف من الأصل في 21-12-2021.
  6. 1 2 دليل لغة بليس (PDF) . شركة المعدات الرقمية . 1987.
  7. ^ "VSI BLISS V1.15-148 لأنظمة OpenVMS x86-64" . vmssoftware.com . VSI. نوفمبر 2025 . تم الاسترجاع 2025/11/12 .

مراجع

التنزيلات