ALGOL 68

ALGOL 68 (اختصارًا لـ Algorithmic Language 1968 ) هي لغة برمجة إجرائية تنتمي إلى عائلة ALGOL، وقد تم تصميمها كخليفة للغة ALGOL 60 ، بهدف تحقيق نطاق أوسع بكثير من التطبيقات وبنية نحوية ودلالات أكثر دقة.

إن تعقيد تعريف اللغة، الذي يمتد إلى مئات الصفحات المليئة بالمصطلحات غير القياسية، جعل تنفيذ المترجم صعبًا، حتى قيل إنها "لا تملك تطبيقات ولا مستخدمين". لم يكن هذا صحيحًا تمامًا؛ فقد وجدت لغة ALGOL 68 استخدامًا في بعض الأسواق المتخصصة، لا سيما في المملكة المتحدة حيث لاقت رواجًا على أجهزة شركة International Computers Limited (ICL)، وفي مجال التدريس. أما خارج هذه المجالات، فكان استخدامها محدودًا نسبيًا.

مع ذلك، كانت إسهامات لغة ALGOL 68 في مجال علوم الحاسوب عميقة وواسعة النطاق ودائمة، على الرغم من أن العديد من هذه الإسهامات لم تُعرف علنًا إلا عند ظهورها مجددًا في لغات برمجة طُوّرت لاحقًا. وقد طُوّرت العديد من اللغات خصيصًا استجابةً للتعقيد المُتصوّر للغة، وأبرزها لغة باسكال ، أو كانت عبارة عن إعادة تنفيذ لأدوار مُحدّدة، مثل لغة آدا .

تُعزى العديد من لغات البرمجة التي ظهرت في سبعينيات القرن العشرين إلى لغة ALGOL 68 تحديدًا، حيث تم اختيار بعض الميزات مع التخلي عن أخرى اعتُبرت معقدة للغاية أو خارجة عن نطاق أدوار معينة. وتعود أصول معظم اللغات الحديثة، على الأقل جزئيًا، إلى لغة C أو باسكال، وبالتالي بشكل مباشر أو غير مباشر إلى لغة ALGOL 68.

ملخص

تتضمن ميزات ALGOL 68 بناء الجملة القائم على التعبيرات، والأنواع والهياكل/الاتحادات الموسومة التي يعلن عنها المستخدم، ونموذج مرجعي للمتغيرات والمعلمات المرجعية، وتقطيع السلاسل والمصفوفات، والتزامن.

تم تصميم لغة ALGOL 68 من قبل الاتحاد الدولي لمعالجة المعلومات (IFIP) ومجموعة العمل 2.1 التابعة له والمعنية باللغات والحسابات الخوارزمية. وفي 20 ديسمبر 1968، اعتمدت المجموعة اللغة رسميًا، ثم وافقت الجمعية العامة للاتحاد الدولي لمعالجة المعلومات على نشرها.

تم تعريف لغة ALGOL 68 باستخدام منهجية رسمية ، وهي قواعد نحوية رسمية ثنائية المستوى ، ابتكرها أدريان فان وينجاردن . تستخدم قواعد فان وينجاردن قواعد نحوية خالية من السياق لتوليد مجموعة لا نهائية من قواعد الإنتاج التي تتعرف على برنامج ALGOL 68 معين؛ والجدير بالذكر أنها قادرة على التعبير عن نوع المتطلبات التي تُصنف في العديد من المعايير التقنية للغات البرمجة الأخرى على أنها دلالات ، ويجب التعبير عنها بلغة طبيعية عرضة للغموض، ثم تنفيذها في المترجمات كشفرة مخصصة مرفقة بمحلل اللغة الرسمية.

كانت لغة ALGOL 68 أول لغة رئيسية (وربما واحدة من آخر اللغات الرئيسية) التي تم وضع تعريف رسمي كامل لها قبل تنفيذها.

تتمثل الأهداف والمبادئ الرئيسية لتصميم ALGOL 68 فيما يلي: [ 7 ]

  1. اكتمال ووضوح الوصف
  2. تعامد التصميم
  3. حماية
  4. كفاءة:

تعرضت لغة ALGOL 68 لانتقادات، أبرزها من قبل بعض أعضاء لجنة التصميم الخاصة بها مثل CAR Hoare و Edsger Dijkstra ، بسبب تخليها عن بساطة ALGOL 60 ، وتحولها إلى وسيلة للأفكار المعقدة أو العامة للغاية، وعدم قيامها إلا بالقليل لتسهيل مهمة كاتب المترجم ، على عكس اللغات المعاصرة (والمنافسة) البسيطة عمدًا مثل C و S-algol و Pascal .

في عام 1970، أصبح ALGOL 68-R أول مترجم برمجي يعمل مع ALGOL 68.

في تنقيح عام 1973، حُذفت بعض السمات، مثل الإجراءات ، والقواعد [ 8 ] ، والحدود الرسمية . [ 9 ] انظر لغة التقرير غير المنقح. r0

على الرغم من أن وكالات الدفاع الأوروبية (في بريطانيا مؤسسة الإشارات والرادار الملكية (RSRE)) روجت لاستخدام ALGOL 68 لما تتمتع به من مزايا أمنية متوقعة، إلا أن الجانب الأمريكي من حلف الناتو قرر تطوير مشروع مختلف، وهو لغة Ada ، مما جعل استخدامها إلزاميًا لعقود الدفاع الأمريكية.

كان لـ ALGOL 68 أيضًا تأثير ملحوظ في الاتحاد السوفييتي ، ويمكن الاطلاع على تفاصيله في مقال أندريه تيريخوف لعام 2014: "ALGOL 68 وتأثيره على الاتحاد السوفييتي والبرمجة الروسية"، [ 10 ] و"Algol 68 и его влияние на программирование в СССР и" روسيا". [ 11 ]

قام ستيف بورن ، العضو في لجنة مراجعة لغة ALGOL 68، بتطبيق بعض أفكارها على بيئة Bourne shell الخاصة به (وبالتالي على بيئات Unix اللاحقة مثل Bash ) وعلى لغة C (وبالتالي على لغات لاحقة مثل C++ ). يستخدم مصدر Bourne shell، المكتوب بلغة C، وحدات الماكرو لجعله أقرب إلى لغة ALGOL. وقد أُطلق عليه اسم " Bournegol ". [ 12 ]

يمكن الاطلاع على التاريخ الكامل للمشروع في كتاب "تاريخ ALGOL 68" لـ CH Lindsey . [ 13 ]

للحصول على معالجة كاملة للغة، انظر "برمجة ALGOL 68 بسهولة" [ 14 ] للدكتورة سيان ماونتباتن، أو "تعلم ALGOL 68 Genie" [ 15 ] لمارسيل فان دير فير والذي يتضمن التقرير المنقح.

تاريخ

الأصول

لغة ALGOL 68، كما يوحي اسمها، هي امتداد للغة ALGOL التي تم وضعها رسميًا لأول مرة عام 1960. في العام نفسه، شكّل الاتحاد الدولي لمعالجة المعلومات (IFIP) فريق العمل المعني بلغة ALGOL، أو WG2.1، وبدأ عمله. أصدر هذا الفريق مواصفات محدّثة للغة ALGOL 60 في روما في أبريل 1962. وفي اجتماع لاحق عُقد في مارس 1964، تم الاتفاق على أن يبدأ الفريق العمل على معيارين لاحقين، هما ALGOL X، الذي سيمثل إعادة تعريف للغة مع بعض الإضافات، و ALGOL Y ، الذي سيتمتع بالقدرة على تعديل برامجه الخاصة على غرار لغة LISP . [ 16 ]

عملية التعريف

عُقد الاجتماع الأول لمجموعة ALGOL X في جامعة برينستون في مايو 1965. وأشار تقرير الاجتماع إلى موضوعين حظيا بتأييد واسع، وهما إدخال الكتابة القوية والاهتمام بمفاهيم أويلر عن "الأشجار" أو "القوائم" للتعامل مع المجموعات. [ 17 ] ورغم أن ALGOL X صُممت لتكون "حلاً قصير الأجل للصعوبات القائمة"، [ 18 ] فقد وصلت إلى مرحلة إعداد مُترجم لها. كتب هذا المُترجم دوغلاس تي. روس من معهد ماساتشوستس للتكنولوجيا (MIT) باستخدام نظام التصميم الهندسي الآلي (AED-0)، والذي يُعرف أيضًا باسم ALGOL Extended for Design . [ 19 ] [ 20 ]

في الاجتماع الثاني الذي عُقد في أكتوبر/تشرين الأول في فرنسا، قُدِّمت ثلاثة مقترحات رسمية: لغة ALGOL W لنيكلاوس ويرث ، مصحوبةً بتعليقات حول هياكل السجلات من قِبَل كار (توني) هوار ، ولغة مشابهة لغيرهارد سيغمولر، وورقة بحثية لأدريان فان وينغاردن بعنوان "التصميم المتعامد ووصف اللغة الرسمية". وقد أثبتت الأخيرة، المكتوبة بلغة "قواعد W" شبه غير قابلة للفك، أنها نقلة نوعية في تطور اللغة. واختُتم الاجتماع بالاتفاق على أن يُعيد فان وينغاردن كتابة مقترح ويرث/هوار باستخدام قواعد W الخاصة به. [ 17 ]

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

في الاجتماع التالي في وارسو في أكتوبر 1966، [ 23 ] قُدِّم تقرير أولي من اللجنة الفرعية للإدخال/الإخراج التي اجتمعت في مختبر أوك ريدج الوطني وجامعة إلينوي ، لكنها لم تُحرز تقدمًا يُذكر. أُعيدت دراسة المقترحين من الاجتماع السابق، وظهر نقاش جديد هذه المرة حول استخدام المؤشرات ؛ إذ استخدمها ALGOL W للإشارة إلى السجلات فقط، بينما كان بإمكان نسخة فان وينجاردن الإشارة إلى أي كائن. ومما زاد الأمر تعقيدًا، قدّم جون مكارثي اقتراحًا جديدًا لتحميل المعاملات الزائدة وإمكانية ربط بنى " و " و "أو" ، بينما أراد كلاوس ساميلسون السماح بالدوال المجهولة . وفي خضم هذا الارتباك، دار نقاش حول التخلي عن المشروع برمته. [ 22 ] واستمر هذا الارتباك خلال ما كان من المفترض أن يكون اجتماع ALGOL Y في زاندفورت في مايو 1967. [ 17 ]

منشور

نُشرت مسودة التقرير أخيرًا في فبراير 1968، ما أثار استياءً واسعًا وردود فعل غاضبة، [ 17 ] ويعود ذلك في معظمه إلى مئات الصفحات التي احتوت على قواعد نحوية غير مفهومة ومصطلحات غريبة. حاول تشارلز هـ. ليندسي فكّ رموز "اللغة الكامنة في التقرير"، [ 24 ] وهي عملية استغرقت ستة أسابيع من العمل. وانتشرت الورقة البحثية الناتجة، بعنوان "ALGOL 68 بأقل قدر من التعقيدات"، [ 25 ] على نطاق واسع. وفي اجتماع موسع لمعالجة المعلومات عُقد في زيورخ في مايو 1968، اشتكى الحضور من فرض هذه اللغة عليهم، وأن الاتحاد الدولي لمعالجة المعلومات (IFIP) هو "المتسبب الحقيقي في هذا الوضع غير المنطقي"، نظرًا لأن الاجتماعات كانت مغلقة في معظمها، ولم تكن هناك آلية رسمية لتلقي الملاحظات. وقدّم ويرث وبيتر نور استقالتهما رسميًا من منصبيهما كمؤلفين في المجموعة العاملة 2.1 في ذلك الوقت. [ 24 ]

عُقد الاجتماع التالي لفريق العمل 2.1 في تيرينيا في يونيو 1968. وكان من المفترض أن يناقش إصدار برامج الترجمة وقضايا أخرى، لكنه انحرف بدلاً من ذلك إلى نقاش حول اللغة. وردّ فان وينغاردن بالقول (أو التهديد) بأنه سيصدر نسخة واحدة أخرى فقط من التقرير. وبحلول ذلك الوقت، كان كل من نور وهور وويرث قد انسحبوا من المشروع، وكان آخرون يهددون بالانسحاب. [ 26 ] وتلت ذلك عدة اجتماعات أخرى، في نورث بيرويك في أغسطس 1968، وميونيخ في ديسمبر، والتي أسفرت عن إصدار التقرير الرسمي في يناير 1969، ولكنها أسفرت أيضاً عن كتابة تقرير الأقلية المثير للجدل. وأخيراً، في بانف، ألبرتا في سبتمبر 1969، اعتُبر المشروع مكتملاً بشكل عام، وتركز النقاش بشكل أساسي على التصويبات ومقدمة موسعة للتقرير. [ 27 ]

استغرقت الجهود خمس سنوات، وأرهقت العديد من أبرز الأسماء في علوم الحاسوب ، ووصلت في عدة مناسبات إلى طريق مسدود بسبب مشاكل تتعلق بالتعريف وبالمجموعة ككل. أصدر هوار "نقدًا للغة ALGOL 68" فورًا تقريبًا، [ 28 ] والذي استُشهد به على نطاق واسع في العديد من الأعمال. واصل ويرث تطوير مفهوم ALGOL W وأصدره باسم باسكال في عام 1970.

التطبيقات

ALGOL 68-R

تم تقديم أول تطبيق للمعيار، استنادًا إلى مسودة التقرير الصادرة أواخر عام 1968، من قِبل المؤسسة الملكية للرادار في المملكة المتحدة تحت اسم ALGOL 68-R في يوليو 1970. إلا أن هذا كان جزءًا من اللغة الكاملة، وقد مازح باري مايلو ، المحرر النهائي للتقرير، قائلًا: "إنها مسألة أخلاقية. لدينا كتاب مقدس وأنتم ترتكبون الخطيئة!" [ 29 ] ومع ذلك، لاقت هذه النسخة رواجًا كبيرًا على أجهزة ICL ، وأصبحت لغة شائعة الاستخدام في البرمجة العسكرية، وخاصة في المملكة المتحدة. [ 6 ]

من بين التغييرات في معيار 68-R اشتراط تعريف جميع المتغيرات قبل استخدامها لأول مرة. وقد مثّل هذا ميزةً هامةً، إذ سمح للمترجم بالعمل في مرحلة واحدة، حيث تم تخصيص مساحة للمتغيرات في سجل التنشيط قبل استخدامها. مع ذلك، كان لهذا التغيير أثر جانبي يتمثل في اشتراط تعريف الإجراءات مرتين، مرةً كتعريف للأنواع، ومرةً أخرى كجزء من نص الكود. كما تم إلغاء وضع VOID المفترض ، وهو تعبير لا يُرجع أي قيمة (يُسمى عبارة في لغات أخرى)، واشتراط إضافة كلمة VOID في المواضع التي كان يُفترض وجودها فيها. علاوةً على ذلك، ألغى معيار 68-R أوامر المعالجة المتوازية الصريحة القائمة على PAR . [ 29 ]

آحرون

تم تقديم أول تطبيق كامل للغة في عام 1974 من قبل شركة CDC هولندا لسلسلة الحواسيب المركزية Control Data . وقد شهد هذا التطبيق استخدامًا محدودًا، واقتصر استخدامه في الغالب على التدريس في ألمانيا وهولندا. [ 6 ]

تم تقديم نسخة مشابهة لـ 68-R من جامعة كارنيجي ميلون عام 1976 تحت اسم 68S، وكانت أيضاً عبارة عن مترجم أحادي المرور يعتمد على تبسيطات مختلفة للنسخة الأصلية، ومخصصة للاستخدام على أجهزة أصغر حجماً مثل DEC PDP-11 . وقد استُخدمت هي الأخرى في الغالب لأغراض تعليمية. [ 6 ]

لم تتوفر نسخة لأجهزة IBM المركزية حتى عام 1978، عندما أصدرت جامعة كامبريدج نسخةً "شبه مكتملة". وفي عام 1984، أصدر ليندسي نسخةً للأجهزة الصغيرة، بما في ذلك جهاز IBM PC. [ 6 ]

توجد ثلاث تطبيقات مفتوحة المصدر للغة Algol 68: [ 30 ]

الجدول الزمني

سنةحدثمساهم
مارس 1959نشرة ALGOL العدد 1 (الأول)بيتر نور / ACM
فبراير 1968تم نشر مسودة التقرير [ 33 ]مجموعة العمل 2.1 التابعة للاتحاد الدولي لمعالجة المعلومات
مارس 1968التقرير النهائي لبرنامج Algol 68 (r0) - عُرض في اجتماع ميونيخمجموعة العمل 2.1 التابعة للاتحاد الدولي لمعالجة المعلومات
يونيو 1968اجتماع في تيرينيا، إيطاليامجموعة العمل 2.1 التابعة للاتحاد الدولي لمعالجة المعلومات
أغسطس 1968اجتماع في نورث بيرويك، اسكتلندامجموعة العمل 2.1 التابعة للاتحاد الدولي لمعالجة المعلومات
ديسمبر 1968التقرير النهائي لمشروع ALGOL 68 (الإصدار r0) - عُرض في اجتماع ميونيخمجموعة العمل 2.1 التابعة للاتحاد الدولي لمعالجة المعلومات
أبريل 1970ALGOL 68-R تحت قيادة GEORGE 3 على متن ICL 1907Fمؤسسة الإشارات والرادار الملكية
يوليو 1970ALGOL 68 لنظام المشاركة الزمنية في دارتموث [ 34 ] [ 35 ]سيدني مارشال
سبتمبر 1973التقرير المنقح لـ Algol 68 [ 36 ] r1 منشورمجموعة العمل 2.1 التابعة للاتحاد الدولي لمعالجة المعلومات
1975ALGOL 68C (C) – مترجم قابل للنقل ( آلة افتراضية zcode )إس. بورن ، وأندرو بيريل ، ومايكل جاي
يونيو 1975جي إي هيدريك وآلان روبرتسون. مُجمِّع مجموعة فرعية من لغة ALGOL 68 لولاية أوكلاهوما. المؤتمر الدولي لعام 1975 حول لغة ALGOL 68.
يونيو 1977مؤتمر ستراثكلايد ALGOL 68، اسكتلنداACM
مايو 1978مقترحات لـ ALGOL H - لغة فائقة لـ ALGOL 68 [ 37 ]إيه بي بلاك، في جيه رايوارد سميث
1984مترجم لغة ALGOL 68S (S) كامل لأجهزة Sun و SPARC وأجهزة الكمبيوتر الشخصيةسي إتش ليندسي وآخرون، مانشستر
أغسطس 1988نشرة ALGOL العدد 52 (الأخير)إد. سي إتش ليندسي / إيه سي إم
مايو 1997تم نشر Algol68 S (S) على الإنترنت [ 38 ]تشارلز إتش. ليندسي
نوفمبر 2001تم نشر Algol 68 Genie (G) على الإنترنت [ 39 ] (ترخيص GNU GPL مفتوح المصدر)مارسيل فان دير فير
يناير 2025واجهة GCC الأمامية (GNU GPL) [ 32 ] [ 31 ]خوسيه إي. ماركيزي
  • "تاريخ مختصر لـ Algol 68"
  • ALGOL 68 – الجيل الثالث من ALGOL

تقارير وأعضاء فريق عمل لغة الخوارزميات ALGOL 68

"وصف فان فيجنجاردن ذات مرة المؤلفين الأربعة، بطريقة ساخرة إلى حد ما، بأنهم: كوستر: ناقل الصوت ، بيك: مُنح الجملة، مايلوكس: المُنفذ، فان فيجنجاردن: مُنظر إيديولوجي للحزب." - كوستر.

الجدول الزمني للتوحيد القياسي

١٩٦٨: في ٢٠ ديسمبر ١٩٦٨، اعتمد الفريق العامل "التقرير النهائي" (MR ١٠١)، ثم وافقت عليه الجمعية العامة للاتحاد الدولي لمعالجة المعلومات التابع لليونسكو للنشر . تُرجم المعيار إلى الروسية والألمانية والفرنسية والبلغارية ، ثم لاحقًا إلى اليابانية والصينية . [ ٤٥ ] كما أُتيح المعيار بطريقة برايل .

1984: نظرت اللجنة الفنية 97 في معيار ALGOL 68 باعتباره "بند عمل جديد" TC97/N1642أبدت ألمانيا الغربية وبلجيكا وهولندا والاتحاد السوفيتي وتشيكوسلوفاكيا استعدادها للمشاركة في إعداد المعيار، لكن الاتحاد السوفيتي وتشيكوسلوفاكيا "لم يكونا من النوع المناسب من الأعضاء في لجان المنظمة الدولية للمقاييس المناسبة".وتوقفت عملية توحيد معيار Algol 68 وفقًا لمعيار ISO.

1988: وفي وقت لاحق أصبح ALGOL 68 أحد معايير GOST في روسيا.

  • GOST 27974-88 لغة البرمجة ALGOL 68 — Язык برمجة АЛГОЛ 68 [ 46 ]
  • GOST 27975-88 لغة البرمجة ALGOL 68 الموسعة — Язык برمجة АЛГОЛ 68 rasshirенный [ 47 ]

عناصر لغوية بارزة

الرموز العريضة والكلمات المحجوزة

تحتوي اللغة القياسية على حوالي ستين كلمة محجوزة، وعادة ما تكون مكتوبة بخط غامق في الطباعة، وبعضها له مكافئات "رمزية مختصرة":

MODE ، OP ، PRIO ، PROC ، FLEX ، HEAP ، LOC ، LONG ، REF ، SHORT ، BITS ، BOOL ، BYTES ، CHAR ، COMPL ، INT ، REAL ، SEMA ، STRING ، VOID ، CHANNEL ، FILE ، FORMAT ، STRUCT ، UNION ، AT "@"، EITHER r0 ، IS ":=:"، ISNT IS NOT r0 ":/=:"، ":≠:"، OF "→" r0 ، TRUE ، FALSE ، EMPTY ، NIL "○"، SKIP "~"، CO "¢"، COMMENT "¢"، PR ، PRAGMAT ، CASE ~ IN ~ OUSE ~ IN ~ OUT ~ ESAC "( ~ | ~ |: ~ | ~ | ~ )"، FOR ~ FROM ~ TO ~ BY ~ WHILE ~ DO ~ OD , IF ~ THEN ~ ELIF ~ THEN ~ ELSE ~ FI "( ~ | ~ |: ~ | ~ | ~ )", PAR BEGIN ~ END "( ~ )", GO TO , GOTO , EXIT "□" r0 .

الوحدات: التعبيرات

الوحدة هي البنية اللغوية الأساسية . قد تكون الوحدة صيغةً ، أو جملةً مُحاطةً ، أو نصًا روتينيًا ، أو إحدى البنى التقنية اللازمة (التخصيص، والقفز، والتخطي، والعدم). يُوحّد المصطلح التقني " الجملة المُحاطة" بعض البنى التي تُحيط بالعناصر بطبيعتها، والمعروفة باسم "الكتلة" ، و"عبارة do" ، و "عبارة switch" في لغات البرمجة المعاصرة الأخرى. عند استخدام الكلمات المفتاحية، يُستخدم عادةً تسلسل الأحرف المعكوس للكلمة المفتاحية المُدخلة لإنهاء الإحاطة، على سبيل المثال: ( IF ~ THEN ~ ELSE ~ FI , CASE ~ IN ~ OUT ~ ESAC , FOR ~ WHILE ~ DO ~ OD ). أعاد ستيفن بورن استخدام صيغة الأمر المحمي هذه في واجهة أوامر بورن الشائعة في أنظمة يونكس . قد يُنتج التعبير أيضًا قيمةً متعددةً ، تُنشأ من قيم أخرى بواسطة جملة جانبية . تُشبه هذه البنية حزمة معلمات استدعاء إجراء.

الوضع: التصريحات

أنواع البيانات الأساسية (المسماة modes في مصطلحات Algol 68) هي real: ، int، compl( عدد مركبbool، char، bitsو bytes. على سبيل المثال:

INT n = 2; CO n ثابت بقيمة 2. CO INT m := 3; CO m متغير محلي تم إنشاؤه حديثًا وقيمته الأولية 3. CO CO هذا اختصار لـ ref int m = loc int := 3; CO REAL avogadro = 6.0221415⏨23; CO عدد أفوجادرو CO long long real long long pi = 3.14159 26535 89793 23846 26433 83279 50288 41971 69399 37510; COMPL الجذر التربيعي لسالب واحد = 0 ⊥ 1;

مع ذلك، فإن هذا التصريح REAL x;ليس سوى اختصار برمجي لـ . أي أن هو في الواقع المعرف الثابت لمرجع إلى متغير محلي حقيقي تم إنشاؤه حديثًا .REFREAL x = LOCREAL;x

علاوة على ذلك، بدلاً من تعريف كل من ` floatand` double، أو ` intand` و` longand` short، وما إلى ذلك، توفر لغة ALGOL 68 مُعدِّلات ، بحيث doubleيُكتب النوع الشائع حاليًا على النحو التالي: `LONG REAL` أو `LONG LONG REAL` ، على سبيل المثال. وتُوفَّر الثوابت التمهيديةmax real ` and` min long intلتكييف البرامج مع مختلف التطبيقات.

يجب تعريف جميع المتغيرات، ولكن ليس بالضرورة أن يسبق التعريف الاستخدام الأول.

مُعرِّف الأنواع الأولية: INT ، REAL ، COMPL ، COMPLEX G ، BOOL ، CHAR ، STRING ، BITS ، BYTES ، FORMAT ، FILE ، PIPE G ، CHANNEL ، SEMA

  • BITS – "متجه مضغوط" من BOOL .
  • البايتات - "متجه مضغوط" من الأحرف .
  • STRING – مصفوفة مرنة من نوع CHAR .
  • SEMAإشارة SEMA التي يمكن تهيئتها باستخدام مستوى المشغل LEVEL .

يمكن إنشاء أنواع معقدة من أنواع أبسط باستخدام مُنشئات أنواع مختلفة:

  • وضع REF - مرجع إلى قيمة من نوع mode ، مشابه لـ & في لغتي C/C++ و REF في لغة باسكال
  • STRUCT – تُستخدم لبناء الهياكل، مثل STRUCT في لغتي C/C++ و RECORD في لغة باسكال
  • الاتحاد - يُستخدم لإنشاء الاتحادات، كما هو الحال في لغات C/C++ وباسكال
  • PROC - تُستخدم لتحديد الإجراءات، مثل الدوال في لغتي C/C++ والإجراءات/الدوال في لغة باسكال

تشمل رموز الإعلان الأخرى ما يلي: FLEX ، HEAP ، LOC ، REF ، LONG ، SHORT ، EVENT S

  • FLEX – أعلن أن المصفوفة مرنة، أي يمكن أن يزداد طولها حسب الطلب.
  • HEAP - تخصيص مساحة حرة للمتغير من الكومة العامة.
  • LOC – تخصيص مساحة حرة من المكدس المحلي للمتغير.
  • LONG – قم بتعريف نوع البيانات INT أو REAL أو COMPL على أنه من نوع LONG .
  • SHORT – أعلن أن INT أو REAL أو COMPL من نوع SHORT .

يمكن تعريف اسم للوضع (النوع) باستخدام تعريف MODE ، وهو مشابه لـ TYPEDEF في لغة C/C++ و TYPE في لغة باسكال:

INT max=99; MODE NEWMODE = [0:9][0:max] STRUCT ( LONG REAL a, b, c, SHORT INT i, j, k, REF REAL r );

هذا مشابه لرمز C التالي:

const int max = 99 ; typedef struct { double a , b , c ; short i , j , k ; float * r ; } newmode [ 9 + 1 ][ max + 1 ];

في لغة ALGOL 68، يظهر مؤشر الوضع NEWMODE فقط على يسار رمز المساواة، والأهم من ذلك أن عملية البناء تتم، ويمكن قراءتها، من اليسار إلى اليمين دون مراعاة الأولويات. كذلك، الحد الأدنى لمصفوفات ALGOL 68 هو واحد افتراضيًا، ولكن يمكن أن يكون أي عدد صحيح من -maxint إلى maxint .

تسمح تعريفات الوضع بأن تكون الأنواع قابلة للتكرار : أي مُعرَّفة بشكل مباشر أو غير مباشر بدلالة نفسها. ويخضع هذا لبعض القيود - على سبيل المثال، هذه التعريفات غير مسموح بها:

الوضع أ = مرجع أ ، الوضع أ = بنية ( أ أ، ب ب)، الوضع أ = إجراء ( أ أ) أ

بينما هذه الأمور صحيحة:

الوضع أ = بنية ( مرجع أ أ، ب ب) الوضع أ = إجراء ( مرجع أ أ) مرجع أ

الإكراه: اختيار الممثلين

تُنتج عمليات الإكراه مُستَغَلًّا من مُستَغَلٍّ وفقًا لثلاثة معايير: النمط القبلي للمُستَغَل قبل تطبيق أي إكراه، والنمط البعدي للمُستَغَلّ المطلوب بعد تلك الإكراهات، والموقع النحوي أو "نوع" المُستَغَلّ. وقد تكون عمليات الإكراه متسلسلة.

تُسمى عمليات الإكراه الست الممكنة: إلغاء الإجراء ، وإلغاء المرجعية ، والتوحيد ، والتوسيع ، والصفوف ، والإبطال . كل عملية إكراه، باستثناء التوحيد ، تُحدث تأثيرًا ديناميكيًا مُقابلًا على القيم المرتبطة بها. وبالتالي، يُمكن برمجة العديد من الإجراءات الأولية ضمنيًا عن طريق عمليات الإكراه.

قوة السياق – الإكراهات المسموح بها:

  • إزالة الإجراءات الجراحية
  • ضعيف – إلغاء المرجعية أو إلغاء الإجراء، مما ينتج عنه اسم
  • ميك – إلغاء المرجع أو إلغاء الإجراء
  • حازم – وديع، متبوعًا بالتوحيد
  • قوي - متين، يليه التوسيع أو التجديف أو الإفراغ

التسلسل الهرمي للإكراه مع أمثلة

تعتمد لغة ALGOL 68 على تسلسل هرمي للسياقات التي تحدد أنواع الإكراهات المتاحة في نقطة معينة من البرنامج. وهذه السياقات هي:

سياق
موقع السياقالإكراه متاحأمثلة على الإكراه في السياق
ناعم
ضعيف
ميك
حازم
قوي
قوي
الجانب الأيمن من:
  • إعلانات الهوية، مثل "~" في:REAL x = ~
  • الأحرف الأولى، مثل "~" في:REAL x := ~

أيضًا:

  • المعلمات الفعلية للمكالمات، كما في "~" في:PROC: sin(~)
  • الجمل المغلقة من التحويلات، مثل "~" في:REAL(~)
  • وحدات النصوص الروتينية
  • البيانات التي تؤدي إلى بطلانها
  • جميع أجزاء الجملة المتوازنة (باستثناء جزء واحد)
  • أحد جانبي علاقة الهوية، كما في "~" في: ~ IS ~
إلغاء الإجراءات​
جميع عمليات الإلغاء الضعيفة ثم الإلغاء الضعيف (إلغاء المرجع أو إلغاء العملية، مما يؤدي إلى اسم)
All WEAK then deref ​enc​ing (deref ​eren​ing or deproc ​edur​ing )
جميعهم ضعفاء ثم يتحدون
جميعها صلبة ثم تتسع ، أو تتجعد أو تفرغ

يُطبَّق التوسيع دائمًا في اتجاه التحويل من عدد صحيح (INT) إلى عدد حقيقي (REAL) ثم إلى عدد مُركَّب (COMPL) ، بشرط أن تكون الأنماط متساوية في الحجم. على سبيل المثال: يُحوَّل العدد الصحيح (INT) إلى عدد حقيقي (REAL )، ولكن ليس العكس. أمثلة:

  • من حقيقي إلى حقيقي
  • إلى COMPL من REAL
  • تحويل [] BOOL من BITS
  • تحويل البايتات إلى أحرف

يمكن أيضًا إجبار (دفع) شيء ما إلى مضاعفات الطول 1.

على سبيل المثال:

  • إلى [1] عدد صحيح من عدد صحيح
  • إلى [1] حقيقي من حقيقي إلخ.
حازم
  • معاملات الصيغ كـ "~" في:~ OP ~
  • معلمات استدعاءات النقل
مثال:

UNION(INT,REAL) var := 1

ميك
  • Trimscripts (التي تنتج INT )
  • للاستفسارات: على سبيل المثال، استخدم الرمز "~" في ما يلي

IF ~ THEN ... FIو FROM ~ BY ~ TO ~ WHILE ~ DO ... OD etc

  • العمليات الأساسية للمكالمات (مثل sin في sin(x))
أمثلة:
  • إلى قيمة منطقية من مرجع مرجعي قيمة منطقية
  • إلى INT من REF REF REF INT
ضعيف
  • العناصر الأساسية للشرائح، كما في "~" في:~[1:99]
  • الاختيارات الثانوية، مثل "~" في:value OF ~
أمثلة:
  • إلى مرجع داخلي من مرجع داخلي مرجع داخلي
  • إلى REF REAL من REF REF REF REAL
  • إلى بنية مرجعية من بنية مرجعية مرجعية مرجعية مرجعية
ناعم
الجانب الأيسر من المهام، كما هو موضح في "~" في:~ := ...مثال:
  • إلغاء إجراء:PROCREAL random: e.g. random

للحصول على مزيد من التفاصيل حول العمليات الأولية والثانوية والثالثية والرباعية، راجع أسبقية المشغل .

العلاقات العامة وشركاؤها: براغمات وتعليقات

تُعرف "البراغمات" (من "الملاحظات البراغماتية") بأنها توجيهات في البرنامج، وعادةً ما تكون تلميحات للمترجم؛ وفي اللغات الحديثة تُسمى "براغمات" (بدون حرف "ت"). على سبيل المثال

PRAGMAT heap=32 PRAGMAT PR heap=32 PR

يمكن إدراج التعليقات بعدة طرق:

الطريقة الأصلية لإضافة رأيك إلى البرنامج تعليق "غامق" تعليق نمط CO تعليق CO تعليق على النمط الثاني هذا رمز هاش/جنيه إسترليني للوحة مفاتيح بريطانية.

عادةً، لا يمكن تضمين التعليقات في ALGOL 68. ويمكن تجاوز هذا القيد باستخدام محددات تعليقات مختلفة (على سبيل المثال، استخدام علامة التجزئة فقط لحذف التعليمات البرمجية المؤقتة).

التعبيرات والعبارات المركبة

بما أن لغة ALGOL 68 هي لغة برمجة تعبيرية ، فإن القيمة المُعادة من عبارة الإسناد هي مرجع إلى الوجهة. وبالتالي، فإن الكود التالي صحيح في لغة ALGOL 68:

حقيقي نصف باي، واحد باي؛ واحد باي := 2 * ( نصف باي := 2 * arc tan(1) )

هذا المفهوم موجود في لغات مثل C و Perl ، وغيرها. لاحظ أنه كما هو الحال في لغات سابقة مثل Algol 60 و FORTRAN ، يُسمح باستخدام المسافات في المعرّفات، لذا فإن هذا half piمعرّف واحد (وبالتالي تجنب مشاكل الشرطات السفلية مقابل حالة الجمل مقابل الأحرف الصغيرة ).

كمثال آخر، للتعبير عن الفكرة الرياضية لمجموع من i =1 إلى n، يكفي التعبير العدديf(i) التالي في ALGOL 68 :

( INT sum := 0; FOR i TO n DO sum +:= f(i) OD ; sum)

لاحظ أنه نظرًا لكونه تعبيرًا عدديًا صحيحًا، يمكن استخدام كتلة التعليمات البرمجية السابقة في أي سياق يُستخدم فيه قيمة عددية صحيحة . تُعيد كتلة التعليمات البرمجية قيمة آخر تعبير تم تقييمه؛ هذه الفكرة موجودة في لغة ليسب ، من بين لغات أخرى.

تُختتم جميع العبارات المركبة بأقواس إغلاق مميزة:

  • بنود الاختيار الشرطية :
عبارات IF الشرطية THEN [ عبارات ELSE ] FI "المختصرة": (الشرط | العبارات | العبارات)
إذا تحقق الشرط 1 ، فإن العبارات صحيحة. وإذا تحقق الشرط 2، فإن العبارات صحيحة. [ وإلا ، فإن العبارات صحيحة ]. صيغة مختصرة: (الشرط 1 | العبارات |: الشرط 2 | العبارات | العبارات)

لا يقتصر هذا المخطط على تجنب مشكلة else المعلقة فحسب ، بل يتجنب أيضًا الاضطرار إلى استخدام BEGINand ENDفي تسلسلات العبارات المضمنة .

  • عبارات الاختيار في حالة CASE :
CASE switch IN statements, statements,... [ OUT statements ] ESAC “brief form: ( switch | statements,statements,... | statements )
CASE switch1 IN statements, statements,... OUSE switch2 IN statements, statements,... [ OUT statements ] ESAC "صيغة مختصرة" لعبارة CASE : ( switch1 | statements, statements,... |: switch2 | statements, statements,... | statements )

مثال على جملة الاختيار باستخدام الرموز المختصرة :

PROC أيام الشهر = ( عدد صحيح السنة، الشهر) عدد صحيح : (شهر| 31، (year÷×4=0 ∧ year÷×100≠0 ∨ year÷×400=0 | 29 | 28 ), 31، 30، 31، 30، 31، 31، 30، 31، 30، 31 );

مثال على جملة الاختيار مع الرموز الغامقة :

PROC أيام الشهر = ( عدد صحيح السنة، الشهر) عدد صحيح : حالة الشهر IN 31، إذا كان باقي قسمة السنة على 4 يساوي 0 وباقي قسمة السنة على 100 لا يساوي 0 أو باقي قسمة السنة على 400 يساويفإن الناتج هو 29، وإلا فهو 28 . 31، 30، 31، 30، 31، 31، 30، 31، 30، 31 ESAC ؛

مثال على جملة الاختيار باستخدام الرموز الغامقة والموجزة :

PROC أيام الشهر = ( عدد صحيح السنة، الشهر) عدد صحيح : حالة الشهر IN 31 يناير ¢Feb¢ ( year MOD 4 = 0 AND year MOD 100 ≠ 0 OR year MOD 400 = 0 | 29 | 28 ), من 31 مارس إلى 31 ديسمبر ESAC ؛

سمحت لغة Algol68 بأن يكون نوع المُبدِّل إما INT أو (بشكل فريد) UNION . يسمح النوع الأخير بفرض كتابة قوية على متغيرات UNION . انظر مثال union أدناه.

[ FOR index ] [ FROM first ] [ BY increment ] [ TO last ] [ WHILE condition ] DO statements OD وبالتالي، فإن الشكل الأدنى لعبارة "حلقة تكرار" هو: DO statements OD

كان هذا يُعتبر الحلقة "العالمية"، والصيغة الكاملة هي:

لـ i من 1 × -22 إلى -333 طالما أن i × i ≠ 4444 كرر ~ OD

يحتوي هذا التصميم على عدة جوانب غير عادية:

  • الجزء DO ~ OD فقط هو الإلزامي، وفي هذه الحالة ستتكرر الحلقة إلى أجل غير مسمى.
  • وبالتالي فإن العبارة TO 100 DO ~ OD ستتكرر 100 مرة فقط.
  • يسمح عنصر WHILE "النحوي" للمبرمج بالخروج من حلقة FOR مبكرًا. على سبيل المثال
INT sum sq:=0; FOR i WHILE print(("حتى الآن:",i,newline)); مجموع المربعات ≠ 70 ↑ 2 يفعل مجموع المربعات:=i↑2 OD

سمحت "التوسعات" اللاحقة لمعيار Algol68 باستبدال العنصر النحوي TO بالعنصرين UPTO و DOWNTO لتحقيق تحسين طفيف. كما تضمنت نفس المترجمات ما يلي:

  • حتى (ج) - لإنهاء الحلقة المتأخرة.
  • FOREACH (S) – للعمل على المصفوفات بالتوازي .

يمكن العثور على المزيد من الأمثلة في أمثلة التعليمات البرمجية أدناه.

الهياكل والاتحادات [:]والمصفوفات

يدعم ALGOL 68 المصفوفات بأي عدد من الأبعاد، ويسمح بتقطيع الصفوف أو الأعمدة كاملة أو جزئية.

...​ اطبع ((m[,2:])); # شريحة من العمودين الثاني والثالث #

يمكن تقسيم المصفوفات بأي من الطريقتين، على سبيل المثال:

REF VECTOR row = m[2,]; # تعريف مرجع (مؤشر) إلى الصف الثاني # REF VECTOR col = m[,2]; # تعريف مرجع (مؤشر) إلى العمود الثاني #

يدعم ALGOL 68 هياكل الحقول المتعددة ( STRUCT ) والأنماط الموحدة . يمكن أن تشير متغيرات المرجع إلى أي نمط بما في ذلك شرائح المصفوفة وحقول الهيكل.

كمثال على كل هذا، إليك تعريف القائمة المرتبطة التقليدية:

MODE NODE = UNION ( VOID , REAL , INT , COMPL , STRING ); MODE LIST = STRUCT ( NODE val, REF LIST next);

مثال على استخدام عبارة UNION CASE في NODE :

Algol68 r0 كما ورد في التقرير النهائي لعام 1968Algol68 r1 كما ورد في التقرير المنقح لعام 1973
NODE n := "1234"; REAL r; INT i; COMPL c; STRING s CASE r,i,c,s::=n IN print(("real:", r)), print(("int:", i)), print(("compl:", c)), print(("string:", s)) طباعة (("?:", n)) ESAC
NODE n := "1234"; أو n := فارغ؛ CASE n IN ( VOID ): print(("void:", "EMPTY")), ( REAL r): print(("real:", r)), ( INT i): print(("int:", i)), ( COMPL c): print(("compl:", c)), ( سلسلة نصية s): اطبع(("سلسلة نصية:", s)) اطبع (("?:", n)) ESAC

proc: الإجراءات

تتطلب إعلانات الإجراءات ( PROC ) تحديد أنواع كل من المعلمات والنتيجة ( VOID إذا لم يكن هناك أي منها):

PROC max of real = ( REAL a, b) REAL : IF a > b THEN a ELSE b FI ;

أو باستخدام الصيغة "المختصرة" للعبارة الشرطية:

PROC max of real = ( REAL a, b) REAL : (a>b | a | b);

القيمة المُعادة من الدالة a procهي قيمة آخر تعبير تم تقييمه في الإجراء. يُسمح أيضًا بالإشارة إلى الإجراءات ( ref proc ). يتم توفير معلمات الاستدعاء بالمرجع عن طريق تحديد المراجع (مثل ref real) في قائمة الوسائط الرسمية. يوضح المثال التالي إجراءً يُطبق دالة (محددة كمعلمة) على كل عنصر من عناصر المصفوفة:

PROC apply = ( REF [] REAL a, PROC ( REAL ) REAL f): FOR i FROM LWB a TO UPB a DO a[i] := f(a[i]) OD 

لم يكن من الممكن تحقيق هذه البساطة في الكود في لغة ALGOL 60 السابقة للغة ALGOL 68 .

op: المشغلون

يمكن للمبرمج تعريف عوامل جديدة ، ويمكن تحميل هذه العوامل والعوامل المُعرَّفة مسبقًا بشكل زائد ، كما يمكن للمبرمج تغيير أولوياتها. يوضح المثال التالي تعريف عامل MAXبنسختين: ثنائية وأحادية (للمسح الضوئي لعناصر المصفوفة).

PRIO MAX = 9; OP MAX = ( INT a,b) INT : ( a>b | a | b ); OP MAX = ( REAL a,b) REAL : ( a>b | a | b ); OP MAX = ( COMPL a,b) COMPL : ( ABS a > ABS b | a | b ); OP MAX = ([] REAL a) REAL :   ( REAL out := a[ LWB a]; FOR i FROM LWB a + 1 TO UPB a DO ( a[i]>out | out:=a[i] ) OD ; خارج)

عمليات المصفوفة، والإجراءات، وفك المرجعية، والتحويل القسري

أولويةالعملية r0 و r1+Algol68 r0+Algol68 G
فعلياً  12 (ابتدائي)فك المرجع، إلغاء الإجراء (~,~)، الفهرسة السفلية [~]، الصفوف [~,]، التقطيع [~:~]، دلالات الحجم طويل وقصيرالإجراءاتالكاري (~,,,), DIAG , TRNSP , ROW , COL
فعلياً  11 (ثانوي)OF (الاختيار)، LOC و HEAP (المولدات) → (اختيار) جديد (مولدات)

هذه ليست عوامل تشغيل من الناحية الفنية، بل تعتبر " وحدات مرتبطة بأسماء ".

المؤثرات الأحادية

الأولوية ( الثالثية)Algol68 "شخصيات جديرة بالتقدير" r0 & r1+Algol68 r0 & r1+Algol68 C,G+Algol68 r0
10ليسأعلى ، أسفل ، LWB ، UPB ،

-, ABS , ARG , BIN , ENTIER , LENG , LEVEL , ODD , REPR , ROUND , SHORTEN

¬, ↑, ↓, ⌊, ⌈عادي ، أثر ، T ، كاشف ، معكوسLWS ، UPS ، ⎩، ⎧، BTB ، CTB

عوامل تشغيل ثنائية ذات أولويات مرتبطة بها

الأولوية ( الثالثية)Algol68 "شخصيات جديرة بالاهتمام" r0 و r1+Algol68 r0 & r1+Algol68 C,G+Algol68 r0
9+*, أنا+×، ⊥!
8SHL ، SHR ، **، أعلى ، أسفل ، LWB ، UPB↑، ↓، ⌊، ⌈××، ^، LWS ، UPS ، ⎩، ⎧
7*، /،  OVER ،  %*، MOD ، ELEM×، ÷، ÷×، ÷*،  %×، □÷:
6-، +
5LT ، <=، LE ، >=، GE ، >، GT≤، ≥
4EQ =, NE ~= /=≠, ¬=
3و/\
2أو/
1ناقص ساب ، زائد ساب ، تايم ساب ، ديفاب ، زائد ساب ، موداب ، بلستو ،

-:=, +:=, *:=, /:=,  %:=,  %*:=, +=:

×:=، ÷:=، ÷×:=، ÷*:=،  %×:=ناقص ، زائد ، DIV ، OVERB ، MODB ، ÷::=، PRUS

تفاصيل محددة:

  • تشمل الأسماء الثانوية NIL و ○.
  • LWS : في Algol68 r0، فإن المعاملات LWS و ⎩ ... كلاهما يُرجع TRUE إذا كانت الحالة الدنيا لبُعد المصفوفة ثابتة.
  • تتشابه عوامل التشغيل UPS و ⎧ في الحالة العليا .
  • تتوفر عوامل التشغيل LWB وUPB تلقائيًا في عمليات الاتحاد ( UNION ) ذات الرتب ( وأنماط ) المختلفة للمصفوفات. على سبيل المثال، UPB لـunion([]int, [,]real, flex[,,,]char)

علاقات التخصيص والهوية، إلخ.

هذه ليست عوامل تشغيل من الناحية الفنية، بل تعتبر " وحدات مرتبطة بأسماء ".

الأولوية (الرباعيات )Algol68 "شخصيات جديرة بالاهتمام" r0 و r1+Algol68 r0 & r1+Algol68 C,G,R+Algol68 r0
فعلياً 0:=, IS  :=:, ISNT  :/=:  :~=:, AT @, ":", ";":≠:  :¬=::=:= ج ، =:= ر..=, .=, CT ,  ::, CTAB ,  ::=, .., ليس , "..", "."

ملاحظة: تشمل الرباعيات الأسماء SKIP و ~.

:=:(أو IS ) يختبر ما إذا كان المؤشران متساويين؛ (أو ISNT ) يختبر ما إذا كانا غير متساويين.:/=:

لماذا :=:و :/=:؟

لنفترض محاولة مقارنة قيمتين مؤشريتين، مثل المتغيرات التالية، المُعلنة كمؤشرات إلى أعداد صحيحة:

REFINT ip, jp

والآن، فكّر في كيفية تحديد ما إذا كان هذان العنصران يشيران إلى نفس الموقع، أو ما إذا كان أحدهما يشير إلى لا شيء . التعبير التالي

ip = jp

سيتم فك مرجعية كلا المؤشرين إلى قيم من النوع INT ، ثم مقارنتهما، لأن عامل المساواة (=) مُعرَّف للنوع INT ، وليس للنوع REF INT . لا يجوز تعريف عامل المساواة (=) لمعاملات من النوعين REF INT و INT في الوقت نفسه، لأن ذلك يُؤدي إلى غموض في الاستدعاءات، نظرًا للتحويلات الضمنية التي يُمكن تطبيقها: هل يجب ترك المعاملات على حالتها REF INT واستدعاء هذا الإصدار من عامل المساواة؟ أم يجب فك مرجعيتها إلى النوع INT واستخدام هذا الإصدار؟ لذلك، لا يُمكن جعل التعبير التالي صحيحًا أبدًا:

ip = NIL

لذا تبرز الحاجة إلى بنيات منفصلة لا تخضع لقواعد التحويل المعتادة للمعاملات إلى عوامل. ولكن ثمة مشكلة. التعبيرات التالية:

ip :=: jp
ip :=: NIL

على الرغم من أن هذا الإجراء قانوني، إلا أنه على الأرجح لن يؤدي الغرض المتوقع. سيعيد دائمًا القيمة FALSE ، لأنه يقارن العناوين الفعلية للمتغيرين و ، بدلاً من العناوين التي يشيران إليها . لتحقيق النتيجة المرجوة، يجب كتابةipjp

ip :=: REFINT(jp)
ip :=: REFINT(NIL)

الأحرف الخاصة

لوحة مفاتيح IBM 2741 مزودة برموز APL

تتوفر معظم الأحرف "الخاصة" في لغة ألغول (⊂، ≡، ␣، ×، ÷، ≤، ≥، ≠، ¬، ⊃، ≡، ∨، ∧، →، ↓، ↑، ⌊، ⌈، ⎩، ⎧، ⊥، ⏨، ¢، ○، و□) على لوحة مفاتيح IBM 2741 المزودة برأس طباعة APL "كرة الغولف"؛ وقد أصبحت هذه الأحرف متاحة في منتصف ستينيات القرن الماضي أثناء صياغة لغة ALGOL 68. وتُعد هذه الأحرف جزءًا من معيار يونيكود ، ومعظمها متوفر في العديد من الخطوط الشائعة .

التحويل: المدخلات والمخرجات

يُستخدم مصطلح "الإدخال والإخراج" للإشارة إلى وظائف الإدخال والإخراج في لغة ALGOL 68. ويشمل ذلك إجراءات مُعرَّفة مسبقًا للإدخال والإخراج غير المُنسَّق، والإدخال والإخراج الثنائي. وتُعالَج الملفات وأجهزة الإدخال والإخراج الأخرى بطريقة مُتَّسقة ومُستقلة عن الجهاز. يُوضِّح المثال التالي كيفية طباعة بعض المُخرَجات غير المُنسَّقة إلى جهاز الإخراج القياسي :

 print((newpage, "العنوان", newline, "قيمة i هي ", i, "و x[i] هو ", x[i], سطر جديد)) 

لاحظ الإجراءات المحددة مسبقًا newpageوالتي newlineتم تمريرها كوسيطات.

الكتب والقنوات والملفات

يُعتبر النقل عبارة عن كتب وقنوات وملفات :

  • تتكون الكتب من صفحات وخطوط وأحرف، ويمكن نسخها احتياطياً بواسطة ملفات.
    • يمكن العثور على كتاب معين بالاسم عن طريق الاتصال بـ match.
  • تتوافق القنوات مع الأجهزة المادية، مثل آلات تثقيب البطاقات والطابعات.
    • يتم تمييز ثلاث قنوات قياسية: قناة الدخول ، وقناة الخروج ، وقناة التراجع .
  • الملف هو وسيلة للتواصل بين برنامج وكتاب تم فتحه عبر قناة ما.
    • يمكن أن تكون حالة الملف هي القراءة والكتابة والحرف والملفات الثنائية والفتح.
    • تشمل إجراءات نقل البيانات ما يلي establish, create, open, associate, lock, close, scratch:
    • استفسارات الوظيفة: char number, line number, page number.
    • تتضمن إجراءات التخطيط ما يلي:
      • space، backspace، newline، newpage.
      • get good line, get good page, get good book، وPROC set=(REFFILE f, INT page,line,char)VOID:
    • يحتوي الملف على إجراءات أحداث ، على سبيل المثال on logical file end, on physical file end, on page end, on line end, on format end, on value error, on char error.

نقل البيانات المنسق

"التحويل المنسق" في تحويل ALGOL 68 له صيغته وأنماطه (وظائفه) الخاصة، مع تضمين FORMAT بين حرفي $. [ 48 ]

أمثلة:

printf (($2l"المجموع هو:"x, g(0)$, m + n)); ¢ يطبع نفس ما يلي: ¢ print((سطر جديد، سطر جديد، "المجموع هو:", مسافة، عدد صحيح (m + n، 0)) 

المعالجة المتوازية

تدعم لغة ALGOL 68 برمجة المعالجة المتوازية. باستخدام الكلمة المفتاحية PAR ، يتم تحويل جملة فرعية إلى جملة متوازية ، حيث يتم التحكم في تزامن الإجراءات باستخدام الإشارات . في A68G، يتم ربط الإجراءات المتوازية بالخيوط عند توفرها على نظام التشغيل المُضيف . أما في A68S، فقد تم تطبيق نموذج مختلف للمعالجة المتوازية (انظر أدناه).

PROC eat = VOID : ( muffins-:=1; print(("لذيذ!", سطر جديد))), speak = VOID : ( words-:=1; print(("Yak...",new line))); INT muffins := 4, words := 8; SEMA mouth = LEVEL 1; PAR BEGIN WHILE muffins > 0 DO DOWN mouth;   يأكل؛ UP mouth OD , WHILE words > 0 DO DOWN mouth; يتكلم؛ نهاية الفم العلوية

متنوع

بسبب تعقيداتها التقنية، تحتاج لغة ALGOL 68 إلى مجموعة كبيرة من الأساليب لإنكار وجود شيء ما:

SKIP أو "~" أو "؟" C – قيمة غير معرفة صالحة نحويًا دائمًا، EMPTY – القيمة الوحيدة المقبولة لـ VOID ، وهي مطلوبة لاختيار VOID في UNION ، VOID – نحويًا مثل MODE ، ولكن ليس واحدًا، NIL أو "○" – اسم لا يدل على أي شيء، لوضع مرجعي غير محدد، () أو تحديدًا [1:0] INTالفراغ عبارة عن مصفوفة فارغة (هنا تحديدًا من نوع MODE [] INT ). غير مُعرَّف – يُبلغ المعيار عن إجراء يُثير استثناءً في نظام وقت التشغيل. ℵ – يُستخدم في تقارير المعايير لمنع التأمل الذاتي من أنواع معينة. على سبيل المثال ، SEMA

يتم تقييم المصطلح NIL IS var دائمًا إلى TRUE لأي متغير (ولكن انظر أعلاه للاستخدام الصحيح لـ IS  :/=:)، في حين أنه من غير المعروف إلى أي قيمة يتم تقييم المقارنة x < SKIP لأي عدد صحيح x .

تترك لغة ALGOL 68 بشكل غير محدد عمداً ما يحدث في حالة تجاوز عدد صحيح ، وتمثيل بتات العدد الصحيح، ودرجة الدقة العددية للفاصلة العائمة.

تضمن كلا التقريرين الرسميين بعض الميزات المتقدمة التي لم تكن جزءًا من اللغة القياسية. وقد تم الإشارة إليها بالرمز ℵ واعتُبرت خاصة فعليًا. ومن الأمثلة على ذلك "≮" و"≯" للقوالب، و OUTTYPE / INTYPE للتصنيف الديناميكي البسيط ، وعاملي STRAIGHTOUT و STRAIGHTIN لـ"تقويم" المصفوفات والهياكل المتداخلة.

أمثلة على الاستخدام

نموذج التعليمات البرمجية

يُطبّق هذا البرنامج النموذجي خوارزمية غربال إراتوستينس لإيجاد جميع الأعداد الأولية الأقل من 100. NIL هو نظير المؤشر الفارغ في لغة ALGOL 68، وهو مُكافئ للمؤشر الفارغ في لغات البرمجة الأخرى. يُستخدم التعبير x OF y للوصول إلى عنصر x من بنية y .

ابدأ # غربال الأعداد الأولية Algol-68، بأسلوب وظيفي # PROC error = ( STRING s) VOID :  (print(( newline, " خطأ: ", s, newline)); GOTO stop); PROC one to = ( INT n) LIST : ( PROC f = ( INT m,n) LIST : (m>n | NIL | cons(m, f(m+1,n))); f(1,n)); MODE LIST = REF NODE ; MODE NODE = STRUCT ( INT h, LIST t); PROC cons = ( INT n, LIST l) LIST : HEAP NODE := (n,l); PROC hd = ( LIST l) INT : (l IS NIL | error("hd NIL "); SKIP | h OF l ); PROC tl = ( LIST l) LIST : (l IS NIL | error("tl NIL "); SKIP | t OF l ); PROC show = ( LIST l) VOID : (l ISNT NIL | print((" ",whole(hd(l),0))); show(tl(l))); PROC filter = ( PROC ( INT ) BOOL p, LIST l) LIST : IF l IS NIL THEN NIL ELIF p(hd(l)) THEN cons(hd(l), filter(p,tl(l))) ELSE filter(p, tl(l)) FI ; PROC sieve = ( LIST l) LIST : IF l IS NIL THEN NIL ELSE PROC not multiple = ( INT n) BOOL : n MOD hd(l) ~= 0;    cons(hd(l), sieve( filter( not multiple, tl(l)))) FI ; PROC primes = ( INT n) LIST : sieve( tl( one to(n) ));    عرض (الأعداد الأولية (100)) نهاية

أنظمة التشغيل المكتوبة بلغة ALGOL 68

  • حاسوب كامبريدج CAP – كُتبت جميع الإجراءات التي تشكل نظام التشغيل بلغة ALGOL 68C ، على الرغم من أن العديد من الإجراءات المحمية الأخرى المرتبطة ارتباطًا وثيقًا، مثل أداة الترقيم، كُتبت بلغة BCPL . [ 49 ]
  • Eldon 3 – تم تطويره في جامعة ليدز لصالح ICL 1900 وتمت كتابته بلغة ALGOL 68-R . [ 50 ]
  • آلة فليكس – كانت المكونات المادية مصممة خصيصًا وقابلة للبرمجة الدقيقة، مع نظام تشغيل، ومترجم (وحداتي)، ومحرر، وجامع قمامة، ونظام ملفات، جميعها مكتوبة بلغة ALGOL 68RS . تم تصميم واجهة سطر الأوامر Curt [ 51 ] للوصول إلى البيانات المكتوبة بشكل مشابه لأوضاع Algol-68.
  • كانت لغة VMES3 هي لغة التنفيذ لنظام التشغيل VME. استندت S3 إلى لغة ALGOL 68 ولكن مع أنواع البيانات والمعاملات المتوافقة مع تلك التي توفرها سلسلة ICL 2900 .

ملاحظة: صُممت حواسيب الحقبة السوفيتية إلبروس-1 (Elbrus-1) وإلبروس-2 باستخدام لغة البرمجة عالية المستوى إل-76 (AL-76)، بدلاً من لغة التجميع التقليدية. تشبه لغة إل-76 لغة ألغول-68، ويكمن الاختلاف الرئيسي في أنواع الربط الديناميكي التي تدعمها إل-76 على مستوى العتاد. تُستخدم إل-76 في برمجة التطبيقات، والتحكم في العمليات، وبرمجة الأنظمة. [ 52 ]

التطبيقات

كُتبت كل من ALGOL 68C و ALGOL 68-R بلغة ALGOL 68، مما يجعل ALGOL 68 تطبيقًا قائمًا بذاته. وتشمل التطبيقات الأخرى ما يلي:

المكتبات وواجهات برمجة التطبيقات

تمثيل البرنامج

من سمات لغة ALGOL 68، الموروثة من تقاليد ALGOL ، تعدد طرق تمثيلها. فالبرامج المكتوبة باللغة الصارمة (المحددة بدقة في التقرير) تُشير إلى أشجار الإنتاج على شكل سلسلة من رموز القواعد، ويجب تمثيلها باستخدام لغة تمثيلية ما ، وهي لغات عديدة ومصممة لأغراض مختلفة.

  • تُعرف لغات التمثيل التي تهدف إلى وصف الخوارزميات في الأعمال المطبوعة بلغات النشر ، وعادة ما تستخدم الطباعة الغنية للدلالة على الكلمات البارزة ومؤشرات المشغل.
  • إن لغات التمثيل التي يُقصد استخدامها في مدخلات المترجم، والتي نسميها لغات البرمجة ، محدودة بالقيود التي تفرضها طرق الإدخال ومجموعات الأحرف، ويتعين عليها اللجوء إلى أنظمة التشويه للتمييز بين الأحرف والأرقام الغامقة وغير الغامقة.
  • لغات التمثيل التي تهدف إلى إنتاجها واستهلاكها بواسطة أجهزة الكمبيوتر، والمعروفة باسم لغات الأجهزة ، تستخدم عادةً تمثيلاً ثنائيًا مضغوطًا.

يُعرّف التقرير المنقح لغة مرجعية ، ويوصي بأن تكون لغات التمثيل التي يُراد قراءتها من قِبل البشر قريبة بما يكفي من اللغة المرجعية بحيث يمكن تمييز الرموز "دون مزيد من التوضيح". وتُسمى لغات التمثيل هذه تطبيقات للغة المرجعية .

على سبيل المثال، يمكن تمثيل البنية في اللغة الصارمة bold-begin-symbol بـ begin في لغة النشر، أو بـ BEGIN في لغة البرمجة، أو بالبايتات 0xC000 في بعض لغات البرمجة الخاصة بالأجهزة. وبالمثل، تختلف اللغة الصارمة عن اللغة التي يمكن فيها تمثيل الرمز بـ ≠ أو /=.

الكلمات المحجوزة في لغة ALGOL 68 تقع فعلياً في نطاق أسماء مختلف عن المعرفات، والمسافات مسموح بها في المعرفات في معظم أنظمة الإيقاف، لذا فإن الجزء التالي قانوني:

INT a real int = 3 ;

لا يملك المبرمج الذي يكتب التعليمات البرمجية القابلة للتنفيذ دائمًا خيار استخدام الخط العريض أو التسطير في التعليمات البرمجية، إذ قد يعتمد ذلك على خصائص الجهاز وعوامل ثقافية. وقد تم ابتكار طرق مختلفة للدلالة على هذه المعرفات، ويُطلق على هذا نظام التظليل . على سبيل المثال، قد تكون بعض أو كل التمثيلات البرمجية التالية متاحة :

'INT'A REAL INT = 3; # QUOTE stropping style # .INT A REAL INT = 3; # POINT stropping style # INT a real int = 3; أسلوب التلميع العلوي int a_real_int = 3; # أسلوب RES في التكرار، هناك 61 كلمة محجوزة مقبولة #

يجب أن تتعرف جميع التطبيقات على الأقل على علامات الاقتباس POINT وUPPER وRES داخل أقسام PRAGMAT. ومن بين هذه العلامات، تُعدّ علامات الاقتباس POINT وUPPER شائعة الاستخدام. وكانت التوصية الأصلية هي استخدام علامة الاقتباس QUOTE (علامة اقتباس مفردة) .

قد يبدو للوهلة الأولى أن استخدام تقنية RES stropping يتعارض مع المواصفات، نظرًا لعدم وجود كلمات محجوزة في لغة Algol 68. لكن هذا غير صحيح. في تقنية RES stropping، يُكتب تمثيل الكلمة المكتوبة بخط غامق (أو الكلمة المفتاحية) begin على النحو التالي: begin ، بينما يُكتب تمثيل المعرّف begin على النحو التالي: begin_ . تجدر الإشارة إلى أن الشرطة السفلية هي مجرد عنصر تمثيلي وليست جزءًا من المعرّف المُمثَّل. على النقيض من ذلك، في اللغات التي لا تستخدم تقنية RES stropping والتي تحتوي على كلمات محجوزة، مثل لغة C على سبيل المثال، لا يمكن تمثيل المعرّف if ، لأن التمثيل if_ يُمثّل المعرّف if_ وليس if .

تم التوصية بالأحرف التالية من أجل قابلية النقل، وأطلق عليها اسم "الأحرف الجديرة بالاهتمام" في التقرير الخاص بالتمثيل القياسي للأجهزة في لغة Algol 68  :

  • ^ الأحرف الجديرة بالاهتمام: ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789 "#$%'()*+,-./:;<=>@[ ]_|

وقد عكس هذا مشكلة في الستينيات حيث لم تدعم بعض الأجهزة الأحرف الصغيرة، ولا بعض الأحرف الأخرى غير ASCII ، بل ورد في تقرير عام 1973 ما يلي: "غالباً ما يتم ترميز أربعة أحرف جديرة بالاهتمام - "|" و "_" و "[" و "]" - بشكل مختلف، حتى في المنشآت التي تستخدم اسمياً نفس مجموعة الأحرف."

  • الشخصيات الأساسية: "الشخصيات الجديرة" هي مجموعة فرعية من "الشخصيات الأساسية".

مثال على تمثيلات البرامج المختلفة

التمثيلشفرة
Algol68 كما هو منشور عادةً
¢ تسطير أو خط غامق ¢ الوضع xint = int ; xint sum sq:=0; for i while مجموع المربعات ≠ 70 × 70 يفعل مجموع المربعات:=i↑2 od
اقتباس الاقتباس (مثل نص الويكي )
'pr' quote 'pr' 'mode' 'xint' = 'int'; 'xint' sum sq:=0; 'لـ' أنا 'بينما' مجموع المربعات ≠ 70 × 70 'يفعل' مجموع المربعات:=i↑2 'od' 
لمترجم رموز الأحرف 7 بت
العلاقات العامة العليا MODE XINT = INT; XINT sum sq:=0; لـ i WHILE مجموع المربعات = 70 × 70 يفعل مجموع المربعات:=i**2 OD 
لمترجم رموز الأحرف 6 بت
. نقطة العلاقات العامة .PR . الوضع .XINT = .INT؛ . XINT SUM SQ:=0; . بالنسبة لي SUM SQ .NE 70*70 . يفعل SUM SQ .PLUSAB I .UP 2 OD
Algol68 باستخدام RES stropping (كلمة محجوزة)
. PR RES .PR mode .xint = int; . xint sum sq:=0; لفترة من الوقت مجموع المربعات ≠ 70 × 70 يفعل مجموع المربعات:=i↑2 od 
Algol68 باستخدام SUPPER stropping (امتداد GNU)
الوضع Int = int; int sum sq:=0; لفترة من الوقت مجموع المربعات ≠ 70 × 70 يفعل مجموع المربعات:=i↑2 od 

تتيح لغة ALGOL 68 لكل لغة برمجة تعريف مجموعة كلماتها المفتاحية الخاصة بها. ونتيجةً لذلك، يستطيع المبرمجون كتابة برامج باستخدام كلمات مفتاحية من لغتهم الأم. فيما يلي مثال على إجراء بسيط لحساب "اليوم التالي"، مكتوب بلغتين: الإنجليزية والألمانية.

# تاريخ اليوم التالي - صيغة إنجليزية # MODE DATE = STRUCT ( INT day, STRING month, INT year); PROC the day following = ( DATE x) DATE : IF day OF x < length of month (month OF x, year OF x) THEN (day OF x + 1, month OF x, year OF x) ELIF month OF x = "December" THEN (1, "January", year OF x + 1) ELSE (1, successor of month (month OF x), year OF x) FI ;
# Nachfolgetag - Deutsche Variante # MENGE DATUM = TUPEL ( علامة GANZ ، WORT monat، GANZ jahr)؛ وظيفة naechster tag nach = ( DATUM x) DATUM : WENN tag VON x < monatslaenge(monat VON x, jahr VON x) DANN (tag VON x + 1, monat VON x, jahr VON x) WENNABER monat VON x = "Dezember" DANN (1، "Januar"، jahr VON x + 1) ANSONSTEN (1، nachfolgemonat(monat VON x)، jahr VON x) ENDEWENN ;

مثال روسي/سوفيتي: في اللغة الإنجليزية، يقرأ بيان الحالة في Algol68 على النحو التالي: CASE ~ IN ~ OUT ~ ESAC ، وفي اللغة السيريلية يقرأ على النحو التالي: выб ~ в ~ либо ~ быв .

التعديلات

باستثناء ما هو مذكور (باستخدام رمز مرتفع )، فإن اللغة الموصوفة أعلاه هي لغة "التقرير المنقح (r1) ".

لغة التقرير غير المنقح

تختلف اللغة الأصلية (كما ورد في "التقرير النهائي" r0 ) في بنية تحويل الوضع ، وكانت تتميز بخاصية المعالجة الإجرائية ، أي تحويل قيمة مصطلح إلى إجراء يقوم بتقييم هذا المصطلح. وكان الهدف من المعالجة الإجرائية هو جعل عمليات التقييم مؤجلة . ولعلّ أكثر التطبيقات فائدةً هو التقييم المختصر للمعاملات المنطقية.

OP ANDF = ( BOOL a, PROC BOOL b) BOOL :(a | b | FALSE ); OP ORF = ( BOOL a, PROC BOOL b) BOOL :(a | TRUE | b);

يتم تقييم b فقط إذا كانت a صحيحة.

كما هو محدد في ALGOL 68، لم يعمل كما هو متوقع، على سبيل المثال في الكود:

إذا كانت القيمة FALSE ANDF CO proc bool: CO ( print ("يجب عدم تنفيذه"); TRUE ) THEN ...

خلافًا لتوقعات المبرمجين الساذجة، كان من المفترض أن يتم تنفيذ أمر الطباعة، حيث أن قيمة العبارة المضمنة المُفصّلة بعد ANDF هي فقط ما تم تنفيذه. أدى إدخال نص PROC BOOL : المُعلّق عليه إلى حل المشكلة.

تقوم بعض التطبيقات بمحاكاة السلوك المتوقع لهذه الحالة الخاصة عن طريق توسيع اللغة.

قبل المراجعة، يمكن للمبرمج أن يقرر تقييم وسائط الإجراء بشكل تسلسلي بدلاً من التقييم الجانبي باستخدام الفواصل المنقوطة بدلاً من الفواصل ( gomma s).

على سبيل المثال في:

PROC test = ( REAL a; REAL b) :... ... اختبار (س زائد 1، س)؛

من المؤكد أن الوسيط الأول المراد اختباره سيتم تقييمه قبل الوسيط الثاني، ولكن بالطريقة المعتادة:

PROC test = ( REAL a, b) :... ... اختبار (س زائد 1، س)؛

عندها يمكن للمترجم تقييم الوسائط بأي ترتيب يراه مناسباً.

مقترحات التمديد من مجموعة العمل 2.1 التابعة للاتحاد الدولي لمعالجة المعلومات

بعد مراجعة التقرير، تم اقتراح بعض التعديلات على اللغة لتوسيع نطاق التطبيق:

  • المعايرة الجزئية (المعروفة أيضًا باسم Currying ): إنشاء وظائف (بمعاملات أقل) عن طريق تحديد بعض المعاملات، وليس كل المعاملات، على سبيل المثال، يمكن تخصيص دالة لوغاريتمية ذات معاملين، الأساس والوسيط، إلى لوغاريتم طبيعي أو ثنائي أو عشري، [ 55 ]
  • امتداد الوحدة : لدعم الربط الخارجي، تم اقتراح آليتين، وهما وحدات تعريف من أسفل إلى أعلى ، وهي نسخة أكثر قوة من المرافق الموجودة في ALGOL 68-R ، وثقوب من أعلى إلى أسفل ، على غرار عبارات " ENVIRONو" USINGمن ALGOL 68C . [ 56 ]
  • معلمات الوضع : لتنفيذ تعدد الأشكال البارامتري المحدود (يمكن تحديد معظم العمليات على هياكل البيانات مثل القوائم أو الأشجار أو حاويات البيانات الأخرى دون المساس بالحمولة). [ 57 ]

حتى الآن، تم تنفيذ المعلمات الجزئية في Algol 68 Genie، وتم تنفيذ مجموعة فرعية من وحدات التجميع المنفصلة في GCC.

مواصفات وتنفيذ لغة ALGOL 68s الحقيقية

اسمسنةغايةولايةوصفوحدة المعالجة المركزية المستهدفةالترخيصلغة التنفيذ
الخوارزمية العامة1962علميالرابطة الوطنية للديمقراطيةALGOL للقواعد النحوية العامة
ALGOL Y Y1966مسودة مقترحدوليالإصدار الأول من ALGOL 68مواصفةACM
ALGOL 68 DR1968مسودة مقترحدوليمسودة تقرير فريق العمل 2.1 التابع للاتحاد الدولي لمعالجة المعلوماتالمواصفات - مارسACM
ALGOL 68 r01968معياردوليالتقرير النهائي لمجموعة العمل 2.1 التابعة للاتحاد الدولي لمعالجة المعلوماتالمواصفات - أغسطسACM
ALGOL 68-R R1970جيشالمملكة المتحدةICL 1900ALGOL 60
EPOS ALGOL E1971علمي
ALGOL 68RS RS1972متعدد الأغراضالمملكة المتحدةنظام مترجم محمولICL 2900/Series 39، Multics، VMS ومولد C (1993)حقوق الطبع والنشر محفوظة للتاج البريطانيALGOL 68RS
ALGOL 68 مع المناطق1972تجريبي وغيرهالمملكة المتحدةالمناطق المضافة إلى ALGOL 68
ميني ألغول 681973بحثالرابطة الوطنية للديمقراطيةمترجم لمجموعة ALGOL 68 الفرعية [ 58 ]مترجم فوري متنقلالمركز الرياضيALGOL 60
مردقوش1973بحثنحن"أهمية نماذج التنفيذ".جامعة كاليفورنيا في لوس أنجلوس
ALGOL 68C C1975علميالمملكة المتحدةكامبريدج ALGOL 68ICL ، IBM 360، PDP-10 و Unix، Telefunken ، TESLA 200، [ 59 ] Z80 (1980) [ 60 ]كامبريدجALGOL 68C
تقرير ALGOL 68 المنقح r11975معياردوليتقرير منقح من مجموعة العمل 2.1 التابعة للاتحاد الدولي لمعالجة المعلوماتمواصفةACM
ALGOL H H1975تجريبي وغيرهالمملكة المتحدةالتوسعات المقترحة لنظام وضع ALGOL 68مواصفةALGOL W
أودرا ألغول 681976الاستخدامات العمليةالاتحاد السوفيتي / بولنداأودرا 1204/إلالاتحاد السوفيتيALGOL 60
أوكلاهوما ALGOL 681976تعليمات البرمجةالولايات المتحدة الأمريكيةتطبيق جامعة ولاية أوكلاهوما [ 61 ] [ 62 ]IBM 1130 و System/370 /158مجهولANSI Fortran 66 .
برلين ALGOL 681977بحثديمترجم محمول لأنظمة System/370 و Siemens S4004 و PDP-11 [ 63 ] [ 64 ]مترجم مستقل عن الآلةالجامعة التقنية في برلينرخصة قيادة تجارية من الفئة الثانية
FLACC F1977متعدد الأغراضيستطيعتم تنفيذ التقرير المنقح بالكامل مع ميزات تصحيح الأخطاءالنظام/370عقد إيجار، شركة شيونمُجمِّع
ALGOL 68-RT RT1979علميالمملكة المتحدةALGOL 68-R المتوازي
RS Algol rs1979علميالمملكة المتحدة
ALGOL 68+1980علميالرابطة الوطنية للديمقراطيةاللغة الفائقة المقترحة لـ ALGOL 68 [ 65 ]
M-220 ALGOL 68الاتحاد السوفياتيإم-220الاتحاد السوفيتيإبسيلون
لينينغراد ALGOL 68 لتر1980الاتصالات السلكية واللاسلكيةالاتحاد السوفياتياللغة الكاملة + الوحداتIBM، DEC، CAMCOH، PS 1001 و PCالاتحاد السوفيتي
ALGOL التفاعلي 68 I1983المملكة المتحدةالتجميع التدريجيجهاز كمبيوتربرامج مجانية غير تجارية
ALGOL 68S S1985علميدوليإصدار صن من ALGOL 68Sun-3 ، وSun SPARC (تحت نظامي التشغيل SunOS 4.1 و Solaris 2)، و Atari ST (تحت نظام التشغيل GEMDOS )، و Acorn Archimedes (تحت نظام التشغيل RISC OS )، و VAX-11 تحت نظام التشغيل Ultrix-32
ALGOL68toC [ 66 ] (ctrans)1985الإلكترونياتالمملكة المتحدةctrans من ELLA ALGOL 68RS مولد كهربائي محمول من نوع Cمفتوح المصدر (1995)ALGOL 68RS
MK2 التفاعلي ALGOL 681992المملكة المتحدةالتجميع التدريجيجهاز كمبيوتربرامج مجانية غير تجارية [ 67 ]
ALGOL 68 Genie G2001اللغة الكاملةالرابطة الوطنية للديمقراطيةيتضمن بند الضمانات القياسيمترجم فوري متنقلرخصة جنو العموميةج
ALGOL 68 Genie الإصدار 2.0.02010اللغة الكاملةالرابطة الوطنية للديمقراطيةمترجم فوري محمول؛ تجميع اختياري لوحدات مختارةرخصة جنو العموميةج
GCC (ga68)2025اللغة الكاملةإسبانيةواجهة أمامية لهيئة الاتصالات الحكوميةمترجم محمولرخصة جنو العموميةلغة سي++

كانت لغة S3 التي تم استخدامها لكتابة نظام التشغيل ICL VME والعديد من برامج النظام الأخرى على سلسلة ICL 2900 مشتقة مباشرة من ALGOL 68. ومع ذلك، فقد حذفت العديد من الميزات الأكثر تعقيدًا، واستبدلت الأوضاع الأساسية بمجموعة من أنواع البيانات التي تتوافق مباشرة مع بنية الأجهزة لسلسلة 2900.

ملحقات خاصة بالتنفيذ

كانت لغة ALGOL 68R من RRE أول تطبيق لمجموعة فرعية من لغة ALGOL 68، تعمل على معالج ICL 1900. استنادًا إلى اللغة الأصلية، تمثلت القيود الرئيسية للمجموعة الفرعية في تعريفها قبل استخدامها وعدم إمكانية المعالجة المتوازية. لاقت هذه المترجمات رواجًا في الجامعات البريطانية خلال سبعينيات القرن الماضي، حيث تعلم العديد من طلاب علوم الحاسوب لغة ALGOL 68 كلغة برمجة أولى؛ واشتهرت هذه المترجمات برسائل الخطأ الواضحة.

كان ALGOL 68RS (RS) من RSRE نظام ترجمة محمولًا مكتوبًا بلغة ALGOL 68RS (مُشتقًا من ALGOL 68R)، وتم تنفيذه على أنظمة متنوعة تشمل ICL 2900 / Series 39 و Multics و DEC VAX/VMS . استندت اللغة إلى التقرير المنقح، ولكن مع قيود فرعية مماثلة لتلك الموجودة في ALGOL 68R. لا يزال هذا المترجم موجودًا في شكل مترجم Algol68 إلى C.

في لغة ALGOL 68S (S) من جامعة كارنيجي ميلون، تم تحسين قدرة المعالجة المتوازية بإضافة امتداد متعامد يُسمى Eventing . أي تعريف لمتغير يحتوي على الكلمة المفتاحية EVENT يجعل عمليات إسناد القيم إلى هذا المتغير مؤهلة للتقييم المتوازي، أي أن الجانب الأيمن من التعريف يُحوّل إلى إجراء يُنقل إلى أحد معالجات نظام C.mmp متعدد المعالجات. ويتأخر الوصول إلى هذه المتغيرات بعد انتهاء عملية الإسناد.

كان Cambridge ALGOL 68C (C) عبارة عن مترجم محمول قام بتنفيذ مجموعة فرعية من ALGOL 68، مما أدى إلى تقييد تعريفات المشغلات وحذف جمع البيانات المهملة والصفوف المرنة والتحويل المنسق.

يُعدّ Algol 68 Genie (G) من تطوير مارسيل فان دير فير تطبيقًا للغة ALGOL 68 مُصمّمًا لأجهزة الكمبيوتر وأنظمة التشغيل الحديثة. يُطبّق هذا المُفسّر امتدادًا واحدًا، وهو اقتراح تشارلز ليندسي للمعاملات الجزئية المنشور عام 1976، والذي يُضفي على لغة Algol 68 الإجرائية لغةً فرعيةً وظيفية.

تُنفّذ مجموعة مُترجمات GNU ، وتحديدًا لغة GNU Algol 68، العديد من امتدادات GNU للغة، [ 68 ] [ 69 ] مما يوفر لغةً فائقةً صارمةً للغة ALGOL 68، كما هو مسموح به صراحةً في التقرير المُعدَّل. [ 1 ] : 51

"على الرغم من النوايا الحسنة، قد ينتهك المبرمج مبدأ قابلية النقل عن طريق استخدام امتداد محلي دون قصد. وللحماية من ذلك، ينبغي أن يوفر كل تطبيق خيار PORTCHECK pragmat. أثناء تفعيل هذا الخيار، يطبع المترجم رسالة لكل بنية يتعرف عليها على أنها تنتهك أحد قيود قابلية النقل." [ 70 ]

يقتبس

  • ... يعود الفضل الكبير في مخطط تركيب الأنواع الذي اعتمدته لغة C إلى لغة Algol 68، على الرغم من أنه ربما لم يظهر بالشكل الذي يرضي أنصار Algol. المفهوم الأساسي الذي استخلصته من Algol هو بنية أنواع قائمة على أنواع ذرية (بما في ذلك البنى)، مُركبة في مصفوفات ومؤشرات (مراجع) ودوال (إجراءات). كما كان لمفهوم الاتحادات والتحويلات في Algol 68 تأثير ظهر لاحقًا. دينيس ريتشي، أبريل 1993. [ 2 ]
  • صحيح أن لغة C لا تنحدر من لغة Algol 68، إلا أن لها تأثيرًا، كان معظمه دقيقًا لدرجة يصعب استخلاصه حتى مع التفكير العميق. على وجه الخصوص، فإن نوع الاتحاد (إضافة لاحقة إلى لغة C) مدينٌ للغة Algol 68، ليس في تفاصيله، بل في فكرة وجود مثل هذا النوع من الأساس. وبشكل أعمق، فإن بنية النوع بشكل عام، وحتى، بطريقة ما، صيغة التصريح (جزء مُنشئ النوع)، مستوحاة من لغة Algol 68. ونعم، بالطبع، كلمة "طويل". دينيس ريتشي ، 18 يونيو 1988 [ 3 ]
  • "تهانينا، لقد فعلها سيدك" – نيكلاوس ويرث [ 71 ]
  • كلما رأيته أكثر، كلما ازداد تعاستي – إي دبليو ديكسترا، 1968 [ 72 ]
  • [...] قيل إن شعبية الطريق السريع A68 تتناسب عكسياً مع [...] المسافة من أمستردام - غيدو فان روسوم [ 73 ]
  • [...] كان أفضل ما استطعنا فعله هو إرسال تقرير للأقلية، نوضح فيه وجهة نظرنا المدروسة بأن "... اللغة، كأداة لإنشاء برامج متطورة بشكل موثوق، كانت فاشلة." [...]كار هوار في محاضرته بمناسبة حصوله على جائزة تورينج في أكتوبر 1980 [ 74 ]
  • «[...] سيُطلب من أداة البرمجة المناسبة أكثر من أي وقت مضى أن تُساعد المبرمج، من خلال هيكلتها، في أصعب جوانب عمله، ألا وهي إنشاء برامج متطورة وموثوقة. في هذا الصدد، لا نرى كيف تُمثل اللغة المقترحة هنا خطوةً هامةً إلى الأمام؛ بل على العكس، نشعر أن نظرتها الضمنية لمهمة المبرمج هي نفسها إلى حد كبير كما كانت عليه قبل عشر سنوات. وهذا يُجبرنا على الاستنتاج بأنه، عند النظر إليها كأداة برمجة، يجب اعتبار اللغة قديمة. [...]» تقرير الأقلية الصادر عن فريق العمل عام 1968 بتاريخ 23 ديسمبر 1968. [ 75 ]

انظر أيضاً

مراجع

الاقتباسات

  1. 1 2 فان Wijngaarden, أدريان ; مايلوكس, باري جيمس ; بيك، جون إدوارد لانسلوت ؛ كوستر, كورنيليس هيرمانوس أنطونيوس ; سينتزوف، ميشيل [بالفرنسية] ؛ ليندسي، تشارلز هودجسون ؛ ميرتنز، لامبرت غيوم لويس تيودور ؛ فيسكر، ريتشارد جي، محرران. (1976). تقرير منقح عن اللغة الخوارزمية ALGOL 68 (PDF) . سبرينغر-فيرلاغ . رقم ISBN 978-0-387-07592-1OCLC 1991170. مؤرشف من الأصل (PDF) بتاريخ 19 أبريل 2019. تم الاطلاع عليه بتاريخ 11 مايو 2019 . 
  2. 1 2 دينيس ريتشي (أبريل 1993). "تطور لغة C" ( ملف PDF) . مؤرشف من الأصل (ملف PDF) بتاريخ 6 نوفمبر 2005. تم الاطلاع عليه بتاريخ 26 أبريل 2007. كان المفهوم الأساسي الذي استخلصته من لغة Algol هو بنية أنواع تعتمد على أنواع ذرية (بما في ذلك البنى)، مُركبة في مصفوفات ومؤشرات (مراجع) ودوال (إجراءات). كما كان لمفهوم الاتحادات والتحويلات في Algol 68 تأثير ظهر لاحقًا.
  3. 1 2 دينيس ريتشي (يونيو 1988). "لغة C و Algol 68" . مؤرشف من الأصل في 27 أغسطس 2009. تم الاطلاع عليه في 15 سبتمبر 2006. على وجه الخصوص ، فإن نوع الاتحاد (إضافة متأخرة إلى لغة C) مدين لـ A68، ليس في أي تفاصيل، ولكن في فكرة وجود مثل هذا النوع على الإطلاق. بشكل أعمق، تم استلهام بنية النوع بشكل عام، وحتى، بطريقة غريبة، بناء جملة الإعلان (جزء مُنشئ النوع) من A68. ونعم، بالطبع، "طويل".
  4. "تاريخ لغة C++: 1979-1991" (ملف PDF) . مارس 1993. الصفحة 12، الفقرة الثانية: قدمت لغة Algol68 إمكانية تحميل المعاملات الزائدة (الفقرة 3.3.3)، والمراجع (الفقرة 3.3.4)، وإمكانية تعريف المتغيرات في أي مكان ضمن كتلة برمجية (الفقرة 3.3.1). مؤرشف من النسخة الأصلية (ملف PDF) بتاريخ 30 أكتوبر 2008. تاريخ الاطلاع : 6 مايو 2008 .
  5. "مقابلة مع غيدو فان روسوم" . يوليو 1998. مؤرشفة من الأصل في 1 مايو 2007. تم الاطلاع عليها في 29 أبريل 2007 .
  6. 1 2 3 4 5 "تاريخ مختصر لـ ALGOL 68" . مؤرشف من الأصل بتاريخ 10 أغسطس 2006. تم الاطلاع عليه بتاريخ 15 سبتمبر 2006 .
  7. فان دير فير، مارسيل. "تقرير منقح عن لغة الخوارزميات Algol 68" . 0.1. أهداف ومبادئ التصميم.
  8. "جدات؟" .
  9. تقرير منقح عن لغة الخوارزميات Algol 68 algol68genie.nl
  10. تيريكوف، أندريه (2014). لغة ALGOL 68 وتأثيرها على البرمجة في الاتحاد السوفيتي وروسيا . المؤتمر الدولي الثالث لتكنولوجيا الحاسوب في روسيا والاتحاد السوفيتي السابق، 2014. الصفحات 97-106 . doi : 10.1109/SoRuCom.2014.29 . ISBN  978-1-4799-1799-0. S2CID 16097093 . 
  11. ^ تيريهوف، أندريه نيكولاييفيتش (2014). Algol 68 и его влияние на программирование в ССССР и России [ Algol 68 وتأثيرها على البرمجة في اتحاد الجمهوريات الاشتراكية السوفياتية وروسيا ] (PDF) . المؤتمر الدولي الثالث، الذي يسلط الضوء على أحدث التقنيات ورعاية البرامج في روسيا ودول الاتحاد السوفييتي السابق: التاريخ والمنظور (بالروسية). ص 336 – 347. 
  12. بيك، جيري؛ أورايلي، تيم؛ لوكيدس، مايكل كوستا (1997). "46.6 احذر من خطأ Bourne Shell -e". أدوات يونكس القوية ( الطبعة الثانية). كامبريدج باريس: أورايلي. ISBN  1-56592-260-3تم الاطلاع عليه بتاريخ 21-05-2026 .
  13. 1 2 ليندسي، تشارلز هـ. (1996). "تاريخ لغة ALGOL 68". في بيرجين، تي جيه؛ جيبسون، آر جي (محرران). تاريخ لغات البرمجة II . مطبعة ACM . ص 27-96 . ISBN  978-0-201-89502-5.أيضًا في ليندسي، سي إتش (مارس 1993). "تاريخ لغة ALGOL 68". إشعارات ACM SIGPLAN . 28 (3): 97-132 . doi : 10.1145/155360.155365 .يتضمن قائمة مراجع شاملة للاجتماعات والمناقشات التي سبقت وأثناء وبعد تطوير ALGOL 68.
  14. ماونتباتن، سيان. "برمجة Algol 68 بسهولة" (ملف PDF) . مؤرشف من الأصل (ملف PDF) بتاريخ 29-04-2023.
  15. فان دير فير، مارسيل. تعلم ALGOL 68 الجني (PDF) .
  16. ليندسي 1993 ، ص 7.
  17. 1 2 3 4 ليندسي 1993 ، ص 9.
  18. ليندسي 1993 ، ص 4.
  19. روس، دوغلاس ت. (أكتوبر 1966). "نظرية خوارزمية للغة (AB26.2.2)" . مركز المعلومات التقنية الدفاعية . معهد ماساتشوستس للتكنولوجيا. ص 6. مؤرشف من الأصل بتاريخ 26-06-2013 . تم الاطلاع عليه بتاريخ 12-08-2020 . 
  20. روس، د. ت. (أغسطس 1967). "AB26.2.2 الميزات الأساسية لـ ALGOL X عملي" . إشعارات ACM SIGPLAN: نشرة ALGOL . 26 (2). رابطة آلات الحوسبة: المكتبة الرقمية. doi : 10.1145/1139498.1139500 . S2CID 38156680. تاريخ الاسترجاع : 12 أغسطس 2020 . 
  21. ليندسي 1993 ، ص 24.
  22. 1 2 ليندسي 1993 ، ص. 10.
  23. "نشرة ALGOL" .
  24. 1 2 ليندسي 1993 ، ص. 12.
  25. ليندسي، سي إتش (1972). "ALGOL 68 بأقل قدر من المتاعب" (ملف PDF) . مجلة الكمبيوتر . 15 (1): 176-188 . doi : 10.1093/comjnl/15.2.176 .
  26. ليندسي 1993 ، ص 13.
  27. ليندسي 1993 ، ص 15.
  28. ^ هور، جمهورية أفريقيا الوسطى (نوفمبر 1968). "نقد MR93 (نقد الغول 68)" . نشرة الغول . 29 : 27 – 29 .
  29. 1 2 بيك، جيه إي إل، محرر (1970)، وقائع مؤتمر عمل الاتحاد الدولي لمعالجة المعلومات حول تطبيق ALGOL 68 ، ميونيخ: نورث هولاند، ISBN 0-7204-2045-8
  30. فان دير فير، مارسيل. "تطبيقات Algol 68 مفتوحة المصدر" . algol68.sourceforge.net .
  31. 1 2 إ. مارشيسي، خوسيه. "الغول 68 الواجهة الأمامية" . gcc.gnu.org .
  32. 1 2 إي. مارشيسي، خوسيه (يناير 2025). "الواجهة الأمامية لـ Algol 68 لدول مجلس التعاون الخليجي" . lwn.net .
  33. ^ فان فيجنجاردن، أ. مايلوكس، بج. بيك، J.؛ كوستر، تشا (01/03/1968). "مسودة تقرير عن اللغة الخوارزمية ALGOL 68" . نشرة الغول (سوب ​​26): 1- 84 . تم الاسترجاع 2023/04/07 عبر مارس 1968.
  34. سيدني مارشال، "تنفيذ ALGOL 68"، وقائع مؤتمر IFIP العملي حول تنفيذ ALGOL 68 ، ميونيخ، 20-24 يوليو 1970، جيه إي إل بيك، محرر، شمال هولندا، الصفحات 239-243 .
  35. سيدني مارشال، حول تطبيق ALGOL 68 ، أطروحة دكتوراه، كلية دارتموث، 1972.
  36. تقرير منقح عن Algol 68
  37. بلاك، أ.ب.؛ رايوارد-سميث، ف.ج. (1 مايو 1978). "مقترحات للغة ALGOL H - لغة فائقة للغة ALGOL 68" . نشرة ALGOL (42): 36-49 . تم الاطلاع عليه بتاريخ 7 أبريل 2023 - عبر مايو 1978.
  38. "Algol68 S (S) نُشر على الإنترنت" . مؤرشف من الأصل بتاريخ 2005-12-03 . تم الاطلاع عليه بتاريخ 2004-08-30 .
  39. فير، مارسيل فان دير. "مشروع ألغول 68 جيني" . algol68genie.nl . تم الاسترجاع بتاريخ 2023-04-07 .
  40. "مسودة تقرير عن لغة الخوارزميات ALGOL 68" . مارس 1968. مؤرشف من الأصل بتاريخ 30 سبتمبر 2007. تم الاطلاع عليه بتاريخ 22 يونيو 2007 .
  41. مايلو، بي جيه؛ بيك، جيه إي إل؛ كوستر، سي إتش إيه (أكتوبر 1968). "المسودة قبل الأخيرة لتقرير لغة الخوارزميات ALGOL 68 - الفصول 1-9" . تم الاطلاع عليه بتاريخ 1 يناير 2025 .
  42. مايلو، بي جيه؛ بيك، جيه إي إل؛ كوستر، سي إتش إيه (أكتوبر 1968). "المسودة قبل الأخيرة لتقرير لغة الخوارزميات ALGOL 68 - الفصول 10-12" . تم الاطلاع عليه بتاريخ 1 يناير 2025 .
  43. "تقرير عن لغة الخوارزميات ALGOL 68" (ملف PDF) . ديسمبر 1968. مؤرشف من الأصل (ملف PDF) بتاريخ 6 أبريل 2008. تم الاطلاع عليه بتاريخ 30 ديسمبر 2007 .
  44. «تقرير منقح عن لغة الخوارزميات Algol 68» . سبتمبر 1973. مؤرشف من الأصل بتاريخ 27-09-2007 . تم الاطلاع عليه بتاريخ 30-04-2007 .
  45. ^ لو هو تشيوان (1971). “ترجمة Algol 68 إلى الصينية” (PDF) . بكين، الصين: معهد الرياضيات، أكاديميا سينيكا . تم الاسترجاع 2012/08/17 .
  46. ^ “GOST 27974-88 لغة البرمجة ALGOL 68 – Язык программирования АЛГОЛ 68” (PDF) (بالروسية). غوست . 1988 مؤرشفة من الأصلي (PDF) بتاريخ 15-11-2008 . تم الاسترجاع 2008-11-15 .
  47. "GOST 27975-88 لغة البرمجة ALGOL 68 الموسعة – Язык программирования АЛГОЛ 68 рассhirенный" (PDF) (بالروسية). غوست . 1988 مؤرشفة من الأصلي (PDF) بتاريخ 29-04-2011 . تم الاسترجاع 2008-11-15 .
  48. "صيغة التنسيق في لغة ALGOL 68G" . مؤرشف من الأصل بتاريخ 9 يناير 2008. تم الاطلاع عليه بتاريخ 7 أبريل 2023 .
  49. نيدهام، آر إم؛ ويلكس، إم في (يناير 1979). "حاسوب كامبريدج CAP ونظام تشغيله" (ملف PDF) . أبحاث مايكروسوفت .
  50. ديفيد هولدسوورث (شتاء 2009-2010). "مشاركة الوقت في KDF9: إلدون 2 ليس إيجدون!" . إحياء الحاسوب - العدد 49. جمعية صيانة الحاسوب . تاريخ الاسترجاع: 3 أكتوبر 2010 .
  51. آي إف كوري؛ جيه إم فوستر (سبتمبر 1982). "مذكرة RSRE" (ملف PDF) . vitanuova.com . مؤرشف من الأصل (ملف PDF) بتاريخ 24 أبريل 2023. تم الاطلاع عليه بتاريخ 7 أبريل 2023 .
  52. ^ إلبروس بابايانا و بنتيوم بنتكوفسكي . اكسبت.كوم. تم الاسترجاع 21 يوليو 2013.
  53. أوليفر، جيه آر؛ نيوتن، آر إس (1979). "التجربة العملية مع لغة ALGOL 68-RT" . مجلة الكمبيوتر . 22 (2): 114-118 . doi : 10.1093/comjnl/22.2.114 .
  54. التطبيقات والمكتبات ومجموعات الاختبار — مجموعة الحفاظ على البرمجيات . Softwarepreservation.org. تم الاطلاع عليه بتاريخ 8 فبراير 2026.
  55. ليندسي، سي إتش (يوليو 1974). "المعاملة الجزئية" . نشرة ALGOL (37): 24-26 . تم الاسترجاع في 19-09-2022 .
  56. ليندسي، سي إتش؛ بوم، إتش جيه (ديسمبر 1978). "وحدات ومرفق تجميع منفصل للغة ALGOL 68" . نشرة ALGOL (43): 19-53 . تم الاطلاع عليه بتاريخ 29 يناير 2020 .تعليقات وتصويبات
  57. ليندسي، سي إتش (يوليو 1974). "الأفعال الناقصة" . نشرة ALGOL (37): 26-29 . تم الاسترجاع في 19-09-2022 .
  58. "مترجم لبرامج ALGOL 68 البسيطة" (ملف PDF) . مؤرشف من النسخة الأصلية (ملف PDF) بتاريخ 18-07-2011.
  59. نادرشال، ج. (مايو 1978). "تنفيذ AB42.2.1 على TESLA 200" . نشرة ALGOL (42).
  60. أندرسون، ريموند (مارس 1980). "ALGOL68C على Z80" (ملف PDF) . جريدة ليفربول للبرمجيات ( الطبعة الثالثة): 52-57 . مؤرشف من الأصل (ملف PDF) بتاريخ 15 أبريل 2010. تم الاطلاع عليه بتاريخ 20 مارس 2010 . 
  61. هيدريك، جي إي؛ روبرتسون، آلان (10-12 يونيو 1975). مُجمِّع مجموعة فرعية من لغة ALGOL 68 لولاية أوكلاهوما . المؤتمر الدولي لعام 1975 حول لغة ALGOL 68. ستيلووتر، أوكلاهوما.
  62. هيدريك، جي إي (أغسطس 1977). "تدريس لغة ALGOL68 في جامعة ولاية أوكلاهوما". نشرة ACM SIGCSE . 9 (3). نيويورك، نيويورك، الولايات المتحدة الأمريكية: ACM: 16-20 . doi : 10.1145/382175.803425 .
  63. كوخ، ويلفريد؛ أويترز، كريستوف (1977). "تطبيق برلين للغة ALGOL 68". إشعارات ACM SIGPLAN . 12 (6): 102-108 . doi : 10.1145/872738.807149 .
  64. كوخ، و.؛ أويترز، س. (1975). مولباخر، ج. (محرر). آلة ALGOL 68 مجردة وتطبيقها في مترجم مستقل عن الآلة . GI - المؤتمر السنوي الخامس. سلسلة محاضرات في علوم الحاسوب. المجلد 34. برلين، هايدلبرغ: سبرينغر. الصفحات 642-653 . doi : 10.1007/3-540-07410-4_665 .  
  65. "موسوعة لغات الحاسوب" . مؤرشفة من الأصل بتاريخ 10-03-2011 . تم الاطلاع عليها بتاريخ 20-03-2010 .
  66. تطبيقات ALGOL 68 مفتوحة المصدر – تصفح الملفات على موقع Sourceforge.net. تم الاطلاع عليها بتاريخ 21 يوليو 2013.
  67. "ملف مضغوط (ZIP) لإصدار MK2.1" . تمت أرشفته من النسخة الأصلية بتاريخ 29-08-2006.
  68. "مجموعة عمل GNU Algol 68" .
  69. "Algol 68" .
  70. هانسن، ويلفريد جيه؛ بوم، هندريك. "تقرير عن التمثيل القياسي للأجهزة للغة Algol 68" (ملف PDF) . مؤرشف من الأصل (ملف PDF) بتاريخ 2014-01-02 . تم الاطلاع عليه بتاريخ 2005-08-27 .
  71. تشا كوستر (1993). صناعة لغة ألغول 68. سلسلة محاضرات في علوم الحاسوب. CiteSeerX 10.1.1.76.2072 . 
  72. ديكسترا، إي دبليو "إلى المحرر ALGOL 68 المركز الرياضي" . مؤرشف من الأصل في 21 أبريل 2007. تم الاطلاع عليه في 28 أبريل 2007 .
  73. فان روسوم، غيدو (يونيو 2005). "قائمة أمنيات مطوري بايثون: دالة dowhile" . تم الاطلاع عليه بتاريخ 28 أبريل 2007 .
  74. هوار، سي. إيه. آر. (فبراير 1981) [استنادًا إلى محاضرته بمناسبة حصوله على جائزة تورينج عام 1980 ]. "ملابس الإمبراطور القديمة" . اتصالات رابطة آلات الحوسبة . 24 (2): 75-83 . doi : 10.1145/358549.358561 . S2CID 97895 . تمت أرشفة الرابط البديل بتاريخ 2017-10-02 على موقع Wayback Machine
  75. "نشرة ALGOL (المشار إليها في AB30.1.1.1)" . مارس 1970. مؤرشفة من الأصل في 30 سبتمبر 2007. تم الاطلاع عليها في 1 مارس 2007 .

المراجع

للمزيد من القراءة

  • برايلسفورد، دي إف؛ ووكر، إيه إن (1979). مقدمة في برمجة ALGOL 68. إليس هوروود/وايلي. ISBN 978-0-85312-127-5.
  • ليندسي، CH؛ فان دير ميولين، سان جرمان (1977). مقدمة غير رسمية لـ ALGOL 68 (PDF) (الطبعة المنقحة  ). شمال هولندا. رقم ISBN 978-0-7204-0504-0.
  • ماكجيتريك، أ.د. (1978). الخوارزميات 68، دورة أولى وثانية . مطبعة جامعة كامبريدج. رقم ISBN 978-0-521-29143-9.
  • بيك، جيل (أكتوبر 1971). رفيق ALGOL 68 (التقرير الفني). جامعة. كولومبيا البريطانية. TR-71-01.
  • تانينباوم، أ.س. (يونيو 1976). "دليل تعليمي حول لغة ALGOL 68". مجلة Computing Surveys ، 8 (2). ACM: 155-190 . doi : 10.1145/356669.356671 . hdl : 1871/2611 .وتانينباوم ، أ.س. (سبتمبر 1977). "تصحيحات: دليل تعليمي حول لغة ALGOL 68". مجلة Computing Surveys . 9 (3): 255-256 . doi : 10.1145/356698.356706 .
  • وودوارد، بي إم؛ بوند، إس جي (1972). دليل مستخدم ALGOL 68-R . لندن: مكتب القرطاسية التابع لجلالة الملكة. ISBN 978-0-11-771422-9.