محاكاة
سيمولا هو اسم لغتي برمجة محاكاة ، سيمولا 1 وسيمولا 67، طُوِّرتا في ستينيات القرن الماضي في المركز النرويجي للحوسبة في أوسلو ، على يد أولي يوهان دال وكريستين نيغارد . من الناحية التركيبية ، تُعدّ سيمولا مجموعة شاملة تقريبية للغة ALGOL 60 ، [ 1 ] : 1.3.1 ، كما تأثرت بتصميم لغة SIMSCRIPT . [ 2 ] [ 3 ]
قدمت لغة Simula 67 الكائنات ، [ 1 ] : 2، 5.3 والفئات ، [ 1 ] : 1.3.3، 2 والوراثة والفئات الفرعية ، [ 1 ] : 2.2.1 والإجراءات الافتراضية ، [ 1 ] : 2.2.3 والروتينات الفرعية ، [ 1 ] : 9.2 ومحاكاة الأحداث المنفصلة ، [ 1 ] : 14.2 وميزت جمع البيانات المهملة . [ 1 ] : 9.1 كما تم تقديم أشكال أخرى من التنميط الفرعي (إلى جانب وراثة الفئات الفرعية) في مشتقات Simula.
تُعتبر لغة سيمولا أول لغة برمجة كائنية التوجه . وكما يوحي اسمها، فقد صُممت النسخة الأولى من سيمولا عام 1962 لإجراء عمليات المحاكاة ؛ أما سيمولا 67 فقد صُممت لتكون لغة برمجة عامة الأغراض [ 4 ] ووفرت الإطار للعديد من ميزات لغات البرمجة كائنية التوجه اليوم.
تم استخدام برنامج Simula في مجموعة واسعة من التطبيقات مثل محاكاة تصميمات التكامل واسع النطاق للغاية (VLSI)، ونمذجة العمليات ، وبروتوكولات الاتصال ، والخوارزميات ، وتطبيقات أخرى مثل التنضيد ، ورسومات الحاسوب ، والتعليم .
أقرّ علماء الحاسوب، مثل بيارن ستروستروب ، مبتكر لغة C++، وجيمس جوسلينج ، مبتكر لغة جافا، بأن لغة سيمولا كان لها تأثير كبير. [ 5 ] وقد أُعيد تنفيذ كائنات من نوع سيمولا في لغات C++ ، وأوبجكت باسكال ، وجافا ، وسي شارب ، والعديد من اللغات الأخرى.
تاريخ
يستند السرد التالي إلى مقالة تاريخية لجان رون هولمفيك. [ 6 ] [ 7 ] [ 8 ] [ 9 ]
بدأ كريستن نيغارد بكتابة برامج محاكاة حاسوبية عام 1957. لاحظ نيغارد الحاجة إلى طريقة أفضل لوصف عدم تجانس النظام وآلية عمله . ولتطوير أفكاره حول لغة برمجة لوصف النظام، أدرك نيغارد حاجته إلى شخص يمتلك مهارات برمجة حاسوبية أكثر منه. انضم إليه أولي-يوهان دال في يناير 1962. وبعد فترة وجيزة، تقرر ربط اللغة بلغة ALGOL 60. وبحلول مايو 1962، تم وضع المفاهيم الأساسية للغة المحاكاة ؛ وهكذا وُلدت لغة SIMULA I ، وهي لغة برمجة متخصصة مصممة لمحاكاة أنظمة الأحداث المنفصلة.
دُعيت كريستين نيغارد لزيارة شركة إيكرت-ماوكلي للحاسبات في أواخر مايو 1962، وذلك في إطار تسويق حاسوبها الجديد UNIVAC 1107. خلال تلك الزيارة، عرضت نيغارد أفكار سيمولا على روبرت بيمر ، مدير برمجة الأنظمة في يونيفاك . كان بيمر من أشد المعجبين بلغة ALGOL ، وقد وجد مشروع سيمولا جذابًا للغاية. كما ترأس بيمر جلسة في المؤتمر الدولي الثاني لمعالجة المعلومات الذي استضافه الاتحاد الدولي لمعالجة المعلومات (IFIP). ودعا بيمر نيغارد، التي قدمت ورقة بحثية بعنوان "سيمولا - امتداد للغة ALGOL لوصف شبكات الأحداث المنفصلة".
حصل المركز النرويجي للحوسبة على جهاز UNIVAC 1107 في أغسطس 1963 بخصم كبير، حيث قام دال بتطبيق برنامج SIMULA I عليه بموجب عقد مع شركة UNIVAC. واعتمد التطبيق على مُترجم لغة ALGOL 60 الخاص بجهاز UNIVAC . وبحلول يناير 1965، أصبح برنامج SIMULA I يعمل بكامل طاقته على جهاز UNIVAC 1107. وفي السنوات القليلة التالية، أمضى دال ونيغارد وقتًا طويلًا في تدريس برنامج Simula. انتشر برنامج Simula في العديد من دول العالم، وتم تطبيق برنامج SIMULA I لاحقًا على أجهزة حاسوب أخرى، بما في ذلك جهاز Burroughs B5500 وجهاز Ural-16 الروسي .
في عام ١٩٦٦، قدّم كار هوار مفهوم بنية فئة السجل، والذي وسّعه دال ونيغارد بمفهوم البادئة وميزات أخرى لتلبية متطلباتهما لمفهوم عملية معمّم. قدّم دال ونيغارد ورقتهما البحثية حول تعريفات الفئات والفئات الفرعية في مؤتمر عمل الاتحاد الدولي لمعالجة المعلومات (IFIP) حول لغات المحاكاة في أوسلو ، مايو ١٩٦٧. أصبحت هذه الورقة أول تعريف رسمي للغة سيمولا ٦٧. في يونيو ١٩٦٧، عُقد مؤتمر لتوحيد اللغة وإطلاق عدد من التطبيقات. اقترح دال توحيد مفهوم النوع ومفهوم الفئة. أدى هذا إلى مناقشات جادة، ورفض المجلس الاقتراح. تم توحيد سيمولا ٦٧ رسميًا في الاجتماع الأول لمجموعة معايير سيمولا (SSG) في فبراير ١٩٦٨.

كان لـ Simula تأثير كبير في تطوير Smalltalk ولغات البرمجة الكائنية التوجه اللاحقة . كما ساهمت في إلهام نموذج الممثل للحوسبة المتزامنة، على الرغم من أن Simula تدعم فقط الروتينات الفرعية وليس التزامن الحقيقي . [ 10 ]
في أواخر الستينيات وأوائل السبعينيات، كانت هناك أربعة تطبيقات رئيسية لبرنامج سيمولا:
- UNIVAC 1100 من المركز النرويجي للحوسبة (NCC)
- نظام/360 ونظام /370 من شركة NCC
- CDC 3000 من خلال تركيب الكمبيوتر المشترك لجامعة أوسلو في كيلر
- TOPS-10 من إعداد المعهد السويدي لأبحاث الدفاع الوطني (FOA)
تم نقل هذه التطبيقات إلى مجموعة واسعة من المنصات. وقد طبق نظام TOPS-10 مفهوم متغيرات وإجراءات الأعضاء العامة والمحمية والخاصة، والتي تم دمجها لاحقًا في معيار Simula في عام 1986.
يُعدّ معيار Simula لعام 1986 أحدث معيار، وهو مُتاح لمجموعة واسعة من المنصات. توجد أربعة تطبيقات رئيسية:
في نوفمبر 2001، مُنح دال ونيغارد ميدالية جون فون نيومان من معهد مهندسي الكهرباء والإلكترونيات (IEEE ) "لإسهامهما في وضع المفاهيم الأساسية للبرمجة كائنية التوجه من خلال تصميم وتنفيذ لغة البرمجة سيمولا 67". وفي أبريل 2002، حصلا على جائزة تورينغ لعام 2001 من جمعية آلات الحوسبة (ACM)، وجاء في حيثيات الجائزة: "لأفكارهما الأساسية التي ساهمت في ظهور البرمجة كائنية التوجه، من خلال تصميمهما للغتي البرمجة سيمولا 1 وسيمولا 67". توفي دال ونيغارد في يونيو وأغسطس من ذلك العام على التوالي، [ 13 ] قبل إلقاء محاضرة جائزة تورينغ من جمعية آلات الحوسبة [ 14 ] التي كان من المقرر أن يلقياها في مؤتمر OOPSLA الذي عُقد في سياتل في نوفمبر 2002.
مختبر أبحاث سيمولا هو معهد بحثي سمي على اسم لغة سيمولا، وشغل نيغارد منصبًا بدوام جزئي هناك منذ افتتاحه في عام 2001. ويسمى مبنى علوم الحاسوب الجديد في جامعة أوسلو ببيت أولي يوهان دال، تكريمًا لدال، وتسمى القاعة الرئيسية سيمولا.
نموذج التعليمات البرمجية
برنامج مصغر
يُعد ملف الحاسوب الفارغ البرنامج الأدنى في لغة سيمولا، وذلك من حيث حجم الكود المصدري . وهو يتكون من شيء واحد فقط؛ عبارة وهمية .
ومع ذلك، فإن البرنامج الأدنى يُمثل بشكل أكثر ملاءمة على هيئة كتلة فارغة:
البداية النهاية ؛
يبدأ التنفيذ ثم يتوقف فوراً. لا تُرجع اللغة أي قيمة من البرنامج.
مرحباً بالعالم الكلاسيكي
مثال على برنامج "مرحباً بالعالم" في لغة سيمولا:
ابدأ إخراج النص ("مرحباً بالعالم!"); إخراج الصورة ; نهاية ;Simula لا تفرق بين الأحرف الكبيرة والصغيرة .
الفئات والفئات الفرعية والإجراءات الافتراضية
مثال أكثر واقعية باستخدام الفئات، [ 1 ] : 1.3.3، وفئتين فرعيتين [ 1 ] : 2.2.1 ، والإجراءات الافتراضية: [ 1 ] : 2.2.3
ابدأ فئة Glyph؛ افتراضي : إجراء طباعة هو إجراء طباعة؛ ابدأ نهاية ؛ Glyph Class Char (c); Character c; Begin Procedure print; OutChar(c); نهاية ؛ فئة Glyph Line (العناصر)؛ مرجع (Glyph) مصفوفة العناصر؛ ابدأ الإجراء print؛ ابدأ عدد صحيح i؛ من أجل i:= 1 خطوة 1 حتى UpperBound (العناصر، 1) كرر العناصر (i).print; صورة خارجية؛ النهاية ؛ النهاية ؛ Ref (Glyph) rg; Ref (Glyph) Array rgs (1 : 4); ! البرنامج الرئيسي؛ rgs (1):- New Char ('A'); rgs (2):- New Char ('b'); rgs (3):- New Char ('b'); rgs (4):- New Char ('a'); rg:- سطر جديد (rgs)؛ rg.print; نهاية ؛يحتوي المثال أعلاه على فئة أساسية واحدة (Glyph) مع فئتين فرعيتين ( Charو Line). يوجد إجراء افتراضي واحد مع تطبيقين . يبدأ التنفيذ بتشغيل البرنامج الرئيسي. تفتقر لغة Simula إلى مفهوم الفئات المجردة ، حيث يمكن إنشاء مثيلات من الفئات التي تحتوي على إجراءات افتراضية بحتة . هذا يعني أنه في المثال أعلاه، يمكن إنشاء مثيلات من جميع الفئات. مع ذلك، سيؤدي استدعاء إجراء افتراضي بحت إلى حدوث خطأ أثناء التشغيل .
الاتصال بالاسم
يدعم برنامج Simula استدعاء المعاملات بالاسم [ 1 ] : 8.2.3، مما يُسهّل تنفيذ جهاز Jensen . مع ذلك، فإن نمط الإرسال الافتراضي للمعاملات البسيطة هو استدعاء المعاملات بالقيمة ، على عكس ALGOL التي تستخدم استدعاء المعاملات بالاسم. لذا، يجب أن يُحدد كود المصدر لجهاز Jensen استدعاء المعاملات بالاسم عند تجميعه بواسطة مُجمِّع Simula.
مثال آخر أبسط بكثير هو دالة الجمعوالتي يمكن تنفيذها على النحو التالي:
إجراء حقيقي سيجما (ك، م، ن، ع)؛ الاسم ك، ع؛ عدد صحيح ك، م، ن؛ عدد حقيقي ع؛ بداية عدد حقيقي س؛ k:= m; بينما k <= n نفّذ ما يلي : s:= s + u; k:= k + 1; انتهى ؛ سيجما:= s؛ نهاية ؛
يستخدم الكود أعلاه استدعاءً بالاسم للمتغير المتحكم ( k) والتعبير ( u). وهذا يسمح باستخدام المتغير المتحكم في التعبير.
لاحظ أن معيار Simula يسمح ببعض القيود على المتغير المتحكم في حلقة for . لذلك، يستخدم الكود أعلاه حلقة while لتحقيق أقصى قدر من قابلية النقل.
ما يلي:
ويمكن بعد ذلك تنفيذ ذلك على النحو التالي:
Z:= Sigma (i, 1, 100, 1 / (i + a) ** 2);
محاكاة
تتضمن حزمة Simula [ 1 ] : 14.2 حزمة محاكاة لإجراء محاكاة الأحداث المنفصلة . تعتمد هذه الحزمة على خصائص Simula الموجهة للكائنات ومفهوم الروتينات الفرعية [ 1 ] : 9.2 . توفر Simula دوالًا لتوليد أرقام عشوائية أو أرقام شبه عشوائية [ 1 ] : 12.1 .
سام وسالي وآندي يتسوقون لشراء ملابس. عليهم استخدام غرفة قياس واحدة. يتجول كل منهم في المتجر لمدة 12 دقيقة تقريبًا، ثم يستخدم غرفة القياس بشكل منفرد لمدة ثلاث دقائق تقريبًا، وفقًا للتوزيع الطبيعي. فيما يلي محاكاة لتجربتهم في غرفة القياس:
بدء محاكاة غرفة القياس؛ بدء باب المرجع (الحمام)؛ منطقي قيد الاستخدام؛ طلب الإجراء ؛ بدء إذا كان قيد الاستخدام ثم بدء انتظر (عند الباب)؛ door.First.Out; نهاية ؛ قيد الاستخدام:= صحيح ؛ نهاية ؛ إجراء المغادرة؛ بداية قيد الاستخدام:= خطأ ؛ تفعيل الباب أولاً؛ نهاية ؛ الباب: - رأس جديد ؛ نهاية ؛ تقرير الإجراء (رسالة)؛ رسالة نصية ؛ ابدأ OutFix (Time, 2, 0); OutText (): " & message); OutImage; نهاية ؛ معالجة فئة الشخص (اسم الشخص)؛ نص اسم الشخص؛ ابدأ بينما صحيح كرر ابدأ Hold (Normal (12, 4, u)); تقرير (اسم المستخدم & " يطلب غرفة القياس")؛ طلب غرفة القياس 1؛ تقرير (اسم المستخدم & "دخل غرفة القياس")؛ Hold (Normal (3, 1, u)); غرفة القياس 1. مغادرة؛ تقرير (اسم المستخدم & "غادر غرفة القياس")؛ النهاية ؛ النهاية ؛ عدد صحيح u؛ مرجع (غرفة القياس) غرفة القياس 1؛ غرفة القياس 1: غرفة قياس جديدة ؛ تفعيل شخص جديد ("سام")؛ تفعيل شخص جديد ("سالي")؛ تفعيل شخص جديد ("آندي")؛ احتفظ (100)؛ نهاية ؛يُسبق الجزء الرئيسي بـ Simulationلتمكين المحاكاة. يمكن استخدام حزمة المحاكاة على أي جزء، ويمكن حتى تداخل عمليات المحاكاة عند محاكاة شخص يقوم بعمليات محاكاة.
يستخدم عنصر غرفة القياس قائمة انتظار ( door) للوصول إليها. عندما يطلب أحدهم غرفة القياس وتكون مشغولة، عليه الانتظار في قائمة الانتظار هذه ( Wait (door)). عندما يغادر أحدهم غرفة القياس، يُحرر أول شخص (إن وُجد) من قائمة الانتظار ( Activate door.first) ويُزال تبعًا لذلك من قائمة انتظار الباب ( door.First.Out).
الشخص هو فئة فرعية Processويتم وصف نشاطه باستخدام hold (وقت تصفح المتجر والوقت الذي يقضيه في غرفة القياس) ويستدعي الإجراءات في كائن غرفة القياس لطلب غرفة القياس ومغادرتها.
يقوم البرنامج الرئيسي بإنشاء جميع الكائنات وتفعيل جميع كائنات الأشخاص لإضافتها إلى قائمة الأحداث. ويستمر البرنامج الرئيسي في العمل لمدة 100 دقيقة من وقت المحاكاة قبل أن ينتهي.
ملحوظات
- 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 داهل، أولي يوهان ; ميرهوغ، بيورن؛ نيجارد ، كريستين (1970). اللغة الأساسية المشتركة (PDF) (أبلغ عن). مركز الحوسبة النرويجي. مؤرشفة من الأصلي بتاريخ 2024-09-19 . تم الاسترجاع في 20 أغسطس 2025 .
- ↑ نيغارد، كريستين (1978). "تطوير لغات المحاكاة" (ملف PDF) .
تأثر تطوير لغتي المحاكاة SIMULA I و SIMULA 67 بتصميم لغة SIMSCRIPT.
- ↑ دال، أولي-يوهان ؛ ميرهاوغ، بيورن؛ نيغارد، كريستين (1970). سيمولا: لغة لبرمجة ووصف أنظمة الأحداث المنفصلة - مقدمة ودليل المستخدم (ملف PDF) (تقرير). المركز النرويجي للحوسبة. مؤرشف من الأصل بتاريخ 23 أغسطس 2025. تم الاطلاع عليه بتاريخ 29 أكتوبر 2025 .
- ↑ كريستين نيغارد وأولي-يوهان دال. 1978. تطوير لغات سيمولا. تاريخ لغات البرمجة. رابطة آلات الحوسبة، نيويورك، نيويورك، الولايات المتحدة الأمريكية، 439-480. DOI: https://doi.org/10.1145/800025.1198392
- ↑ وونغ، ويليام. "قبل لغة سي، ماذا كنت تستخدم؟" . التصميم الإلكتروني . تم الاسترجاع في 22 مايو 2017 .
- ↑ هولمفيك، جان رون (1994). "تجميع المحاكاة: دراسة تاريخية للنشأة التكنولوجية" (ملف PDF) . حوليات IEEE لتاريخ الحوسبة . 16 (4): 25-37 . doi : 10.1109/85.329756 . S2CID 18148999. تاريخ الاسترجاع: 12 مايو 2010 .
- ↑ هولمفيك، يان رون. "تجميع المحاكاة" . أوسلو، النرويج: معهد الدراسات في البحث والتعليم العالي. مؤرشف من الأصل في 20 أبريل 2009. تم الاطلاع عليه في 19 أبريل 2017 .
- ↑ هولمفيك، يان رون. "تاريخ سيمولا" . أوسلو، النرويج: معهد الدراسات في البحث والتعليم العالي. مؤرشف من الأصل في 27 أكتوبر 2025. تم الاسترجاع في 27 أكتوبر 2025 .
- ↑ هولمفيك، يان رون. "لغة برمجة سيمولا" . أوسلو، النرويج: جامعة أوسلو. مؤرشف من الأصل في 27 أكتوبر 2025. تم الاطلاع عليه في 27 أكتوبر 2025 .
- ^ ليرمان مادسن، أولي (2014). “بناء تجريدات التزامن الآمن”. في آغا، جول؛ إيجاراشي، أتسوشي؛ كوباياشي، ناوكي؛ ماسوهارا، هيديهيكو؛ ماتسوكا، ساتوشي؛ شيباياما، إتسويا؛ تورا، كينجيرو (محرران). الكائنات المتزامنة وما بعدها . ملاحظات محاضرة في علوم الكمبيوتر. المجلد. 8665. برلين: سبرينغر. ص. 68. دوى : 10.1007/978-3-662-44471-9 . رقم ISBN 978-3-662-44471-9. S2CID 1000741 .
- ↑ "GNU Cim" .
- ↑ "إعادة النظر في برنامج المحاكاة المحمول" . جيت هاب . تم الاطلاع عليه بتاريخ 17 يونيو 2019 .
- ↑ "ACM أولي-يوهان دال وكريستين نيغارد - نعي" . Acm.org. مؤرشف من الأصل في 19 يوليو 2011. تم الاطلاع عليه في 14 يناير 2012 .
- ↑ "محاضرات جائزة تورينج من ACM" . Informatik.uni-trier.de . تم الاطلاع عليه بتاريخ 14 يناير 2012 .
مصادر
- سيلفستر، بيتر. "مترجم نظام IBM 360/370 والوثائق التاريخية" (معيار Simula والوثائق التاريخية الأخرى).
للمزيد من القراءة
- بولي، روب (1987)، مقدمة في البرمجة بلغة سيمولا ، دار نشر ألفريد والر المحدودة، رقم ISBN 0632016116تمت أرشفة هذا النص من النسخة الأصلية بتاريخ 19 سبتمبر 2004.
روابط خارجية
- الموقع الرسمي (آخر نسخة عاملة موجودة على archive.org، تم الوصول إليها بتاريخ 26-02-2022)
- مراجعة برنامج Portable Simula على GitHub
- لهجة ALGOL 60
- لغات البرمجة القائمة على الفئات
- الاختراعات النرويجية
- لغات البرمجة التي تم ابتكارها عام 1962
- العلوم والتكنولوجيا في النرويج
- لغات برمجة المحاكاة
- لغات البرمجة
- لغات البرمجة ذات الكتابة الثابتة
