S3 (لغة برمجة)

S3 هي لغة برمجة حاسوبية عالية المستوى ، ذات بنية هيكلية وإجرائية . [ 1 ] طُوّرت من قِبل شركة International Computers Limited (ICL) البريطانية لأجهزة الحاسوب المركزية من سلسلة 2900. وهي لغة برمجة أنظمة ، متأثرة في تركيبها النحوي بلغة ALGOL 68، ولكن بأنواع بيانات ومعاملات تتوافق مع تلك التي توفرها سلسلة 2900. وكانت لغة التنفيذ لنظام التشغيل VME .

مثال مُشروح

من الأمثلة النادرة على برامج S3 المتاحة للعموم، تطبيق برنامج كيرميت الذي طُوّر في مركز الحوسبة الإقليمي لجامعات الجنوب الغربي، والمحفوظ في أرشيف تطبيقات كيرميت بجامعة كولومبيا . [ 2 ] الأمثلة التالية هي أبرز ما في الوحدة الرئيسية (kmt_main_module).

يبدأ البرنامج بتحديد الوحدة، والتعليقات التي نقتبسها كنوع من التقدير للمؤلفين:

الوحدة النمطية KMT_MAIN_MODULE؛ @ الإصدار 1.01 @ @------------------------------------------------------------------------------@ @ @ @ @ @ ----- سوورككفميكيرميت ----- @ @ @ @ @ @ ---------------------------------------------------------------- @ @ @ @ @ @ الإصدار 1.00 (فبراير 1986) @ @ @ @ تأليف: ريتشارد أندروز وديفيد لورد، @ مركز الحاسوب الإقليمي التابع لجامعات الجنوب الغربي، @ @ كلافيرتون داون، باث BA2 7AY، المملكة المتحدة @ @ @ @ @ @ ---------------------------------------------------------------- @ @ @ @ @ @ الإصدار 1.01 (أكتوبر 1986) @ @ @ @ تم الإصلاح بواسطة: ديف ألوم وديفيد لورد، SWURCC. @ @ ---------------------------------------------------------------- @

يلي ذلك عدد من "إعلانات الوضع". الوضع هو مصطلح Algol 68 للنوع.

MODE KMT_BUFFER IS (96)BYTE; MODE KMT_STRING IS REF()BYTE; MODE KMT_WORD IS REF()BYTE; MODE KMT_MTM_VALUES IS ANY (الكلمة الطويلة LW_VALUE، LONG INT LI_VALUE, REF WORD RW_VALUE, REF INT RI_VALUE, REF LONG WORD RLW_VALUE, REF LONG INT RLI_VALUE, REF()BYTE RVB_VALUE, REF()REF()BYTE RVRVB_VALUE); MODE KMT_PP_PACKET_STATISTICS_S IS STRUCT (INT INPUT_TOTAL, إجمالي الناتج)؛ 

النوع الأول عبارة عن مصفوفة من 96 بايت؛ أما النوعان التاليان فهما مؤشران إلى مصفوفات من البايتات. KMT_MTM_VALUES هو نوع اتحاد يسمح بظهور أنواع مختلفة. لاحظ أن WORD هو عدد صحيح غير مُوقَّع 32 بت ، وINT هو عدد صحيح مُوقَّع 32 بت؛ أما LONG فيجعله 64 بت. الخيار الأخير في الاتحاد مُعلَّم بـ REF()REF()BYTE، مما يعني أنه مؤشر إلى مصفوفة عناصرها عبارة عن مؤشرات إلى مصفوفات من البايتات.

النوع النهائي المعلن هنا هو بنية (STRUCT)، وتحديداً مجموعة تحتوي على عددين صحيحين.

يستمر البرنامج بتعريف الإجراءات الخارجية التي يعتمد عليها البرنامج. تشير RESPONSE إلى قيمة مُعادة تحتوي على معلومات الخطأ.

EXT PROC (RESPONSE) KMT_UI; EXT PROC (REF INT,INT,RESPONSE) KMT_PH; EXT PROC (REF INT,REF INT,RESPONSE) KMT_PP_GET_PACKET, PROC (INT,INT,BOOL,RESPONSE) KMT_PP_SEND_PACKET, PROC (REF()BYTE,RESPONSE) KMT_PP_BUILD_STRING_PACKET_DATA; 

وبعض المتغيرات الخارجية أيضاً:

EXT REF () BYTE KMT_VERSION; EXT REF BOOL ASG_ROUTE; EXT REF()KMT_MTM_VALUES KMT_MTM_AREA; EXT REF()BYTE MTM_TEXT; EXT REF INT MTM_TEXT_LEN; EXT REF ()REF ()BYTE MTM_RECALL_DATA; 

يتألف باقي البرنامج من عدد من تعريفات الإجراءات. أحد هذه التعريفات، الذي يُعرّف نقطة الدخول إلى البرنامج، مُدرج هنا:

GLOBAL STATIC (<STATUS 5;PSPACE 10001; TEMPLATE>) PROC KERMIT_THE_FROG IS ((<LIT "COMMAND">) REF()BYTE OPTION, (<LIT "" >) REF()BYTE VME_FILE, (<LIT "" >) REF()BYTE REM_FILE, (<استجابة المفتاح؛ تعريف النتيجة>) نتيجة الاستجابة): يبدأ ()BYTE JSV_NAME := "ASG"; @ الحصول على قيمة ASG_ROUTE bool @ CTM_JS_READ(JSV_NAME,NIL,NIL,ASG_ROUTE,RC_IGNORED); إذا كانت قيمة RC_IGNORED لا تساوي 0، فإن ASG_ROUTE := FALSE FI; @ التحقق من مراجع المعلمات (سيتم التحقق من صحة قيم المعلمات لاحقًا): @ يجب أن يكون الخيار من نوع REF() BYTE، ولا يجوز أن يكون ZLR أو NIL. يجب أن يكون @VME_FILE من نوع REF() BYTE، وقد يكون ZLR، ويجب ألا يكون NIL. يجب أن يكون @REM_FILE من نوع REF() BYTE، وقد يكون ZLR، ويجب ألا يكون NIL. إلا إذا (خيار التحقق وخيار التحقق من الصلاحية) و (تحقق من ملف VME_FILE و (VALIDR VME_FILE أو ليس (VME_FILE فارغًا))) و (تحقق من REM_FILE و (VALIDR REM_FILE أو ليس (REM_FILE IS NIL))) ثم @ مرجع معلمة غير صالح @ النتيجة := 10002 @ ARCH_INACCESSIBLE_PARAMETER @ ELSF @ إنشاء كتلة موارد @ CTM_JS_BEGIN(RESULT); النتيجة <= 0 ثم تم إنشاء كتلة الموارد @ كلمة طويلة جداً KERMIT_RESULT؛ ANY((3)LONG WORD AS_LW,(6) WORD AS_W) PARAMS; PARAMS.AS_LW := (BDESC OPTION,BDESC VME_FILE,BDESC REM_FILE); @ إعداد معالج أخطاء البرنامج @ IF KMT_EH_INFORM_PE_CONTINGENCY(RESULT); النتيجة > 0 ثم فشل @ في تعيين معالج الأخطاء @ يتخطى ELSF CTM_JS_CALL(NIL,PDESC KERMIT_SUPPORT,PARAMS.AS_W,KERMIT_RESULT, النتيجة)؛ @ إنشاء جدار حماية @ النتيجة <= 0 ثم @ تم الخروج إما بشكل طبيعي أو عبر CTM_STOP @ النتيجة := إذا كانت (S'S'KERMIT_RESULT) <= 0 ثم 0 @ تجاهل التحذيرات @ وإلا 52000 @ خطأ إرجاع رمز النتيجة المشترك @ FI FI؛ CTM_JS_END(RC_IGNORED) @ نهاية كتلة الموارد @ FI نهاية 

من بين الميزات التي تجدر الإشارة إليها هنا ما يلي:

  • يتم تزيين إعلان الإجراء بتعليقات تحدد صيغة سطر الأوامر التي تسمح باستدعاء البرنامج من SCL، أو استخدامه من غلاف تفاعلي مع مطالبة بقيم المعلمات الافتراضية.
  • استدعاءات الإجراءات التي تبدأ بـ CTM هي استدعاءات إلى "آلة الهدف للمترجم"، وهي واجهة برمجة تطبيقات (API) يقدمها نظام التشغيل VME.
  • "JSV" تعني "متغير مساحة العمل"، وهو مصطلح VME لمتغير البيئة ، ويقوم استدعاء CTM_JS_READ بقراءة قيمة المتغير.
  • UNLESS تعني "إذا لم يكن"؛ ELSF تعني "وإلا إذا".
  • يُعلن LONG LONG WORD عن عدد صحيح 128 بت ، وهو نوع أصلي تدعمه بنية 2900
  • يُعهد بمعظم المعالجة إلى إجراء آخر، KERMIT_SUPPORT، الموجود في نفس الوحدة. يُستدعى هذا الإجراء بشكل غير مباشر عبر نظام التشغيل CTM_JS_CALL، على غرار استدعاء exec() في أنظمة يونكس؛ مما يضمن معالجة سليمة للأخطاء وتنظيف أي موارد في حالة حدوث خطأ فادح. تُنشئ الكلمة المفتاحية PDESC "واصف إجراء": فهي تُعامل KERMIT_SUPPORT كدالة من الدرجة الأولى يمكن تمريرها كوسيط إلى دالة أخرى، مما يجعل CTM_JS_CALL دالة من الرتبة العليا تستدعي وسيطها المُمرر مع معالجة مناسبة للأخطاء.

مراجع

  1. هونكه، هورست (1981). بيئات هندسة البرمجيات (  طبعة مصورة). دار نشر نورث هولاند، ص  83. ISBN 978-0-444-86133-7.
  2. "أرشيف شفرة المصدر لبرنامج كيرميت" . مشروع كيرميت بجامعة كولومبيا. 22 أغسطس 2011. تم الاطلاع عليه في 1 مارس 2013 .