محاكاة
| النماذج | متعدد النماذج : إجرائي ، أمري ، منظم ، موجه نحو الكائنات |
|---|---|
| عائلة | ألغول |
| صمم بواسطة | أولي يوهان دال |
| المطور | كريستين نيجارد |
| ظهرت لأول مرة | 1962 |
| إصدار مستقر | سيمولا 67، سيمولا 1
|
| الانضباط في الطباعة | ثابت ، اسمي |
| نِطَاق | معجمي |
| لغة التنفيذ | ALGOL 60 (أساسًا؛ بعض مكونات Simscript ) |
| نظام التشغيل | شبيه يونكس ، ويندوز ، z/OS ، TOPS-10 ، MVS |
| موقع إلكتروني | www.simula67.info |
| متأثر بـ | |
| ألجول 60 ، سيمسكربت | |
| متأثر | |
| BETA و CLU و Eiffel و Emerald و Pascal و Smalltalk و C++ والعديد من لغات البرمجة الموجهة للكائنات الأخرى | |
Simula هو اسم لغتين برمجة محاكاة ، Simula I وSimula 67، تم تطويرهما في الستينيات في مركز الحوسبة النرويجي في أوسلو ، بواسطة Ole-Johan Dahl و Kristen Nygaard . من الناحية النحوية ، فهي مجموعة فرعية تقريبية من ALGOL 60 ، [1] : 1.3.1 وتأثرت أيضًا بتصميم Simscript . [2]
قدمت 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. [ بحاجة لمصدر ]
تعتبر لغة Simula أول لغة برمجة موجهة للكائنات . وكما يوحي اسمها، فقد تم تصميم أول إصدار من لغة Simula في عام 1962 لإجراء عمليات المحاكاة ؛ ومع ذلك، تم تصميم لغة Simula 67 لتكون لغة برمجة عامة الغرض [3] ووفرت الإطار للعديد من ميزات لغات البرمجة الموجهة للكائنات اليوم.
تم استخدام Simula في مجموعة واسعة من التطبيقات مثل محاكاة تصميمات التكامل واسع النطاق (VLSI)، ونمذجة العمليات ، وبروتوكولات الاتصال ، والخوارزميات ، وتطبيقات أخرى مثل الطباعة ، والرسومات الحاسوبية ، والتعليم . غالبًا ما يتم التقليل من تأثير Simula، ويتم إعادة تنفيذ كائنات من نوع Simula في C++ و Object Pascal و Java و C# والعديد من اللغات الأخرى. أقر علماء الكمبيوتر مثل Bjarne Stroustrup ، مبتكر C++، و James Gosling ، مبتكر Java، بأن Simula كان له تأثير كبير. [4]
تاريخ
يعتمد الحساب التالي على مقالة تاريخية كتبها جان رون هولمفيك. [5] [6]
بدأت كريستين نيجارد كتابة برامج محاكاة الكمبيوتر في عام 1957. رأى نيجارد الحاجة إلى طريقة أفضل لوصف التباين وتشغيل النظام . وللمضي قدمًا في أفكاره حول لغة كمبيوتر رسمية لوصف النظام، أدرك نيجارد أنه بحاجة إلى شخص لديه مهارات برمجة كمبيوتر أكثر مما لديه. انضم إليه أولي يوهان دال في عمله في يناير 1962. تم اتخاذ قرار ربط اللغة بـ ALGOL 60 بعد فترة وجيزة. بحلول مايو 1962، تم تحديد المفاهيم الرئيسية للغة المحاكاة . وُلدت SIMULA I ، وهي لغة برمجة ذات غرض خاص لمحاكاة أنظمة الأحداث المنفصلة.
تمت دعوة كريستين نيجارد لزيارة شركة Eckert–Mauchly Computer Corporation في أواخر مايو 1962 فيما يتعلق بتسويق جهاز الكمبيوتر الجديد UNIVAC 1107. في تلك الزيارة، قدمت نيجارد أفكار Simula إلى روبرت بيمر ، مدير برمجة الأنظمة في Univac . كان بيمر من أشد المعجبين بـ ALGOL ووجد مشروع Simula مقنعًا. كان بيمر أيضًا رئيسًا لجلسة في المؤتمر الدولي الثاني حول معالجة المعلومات الذي استضافه الاتحاد الدولي لمعالجة المعلومات (IFIP). دعا نيجارد، الذي قدم ورقة بحثية "SIMULA - امتداد لـ ALGOL لوصف شبكات الأحداث المنفصلة".
حصل مركز الحوسبة النرويجي على UNIVAC 1107 في أغسطس 1963 بخصم كبير، حيث نفذ دال SIMULA I بموجب عقد مع UNIVAC. كان التنفيذ يعتمد على مُجمِّع UNIVAC ALGOL 60. كان SIMULA I يعمل بكامل طاقته على UNIVAC 1107 بحلول يناير 1965. في السنوات القليلة التالية، قضى دال ونيجارد الكثير من الوقت في تدريس Simula. انتشر Simula في العديد من البلدان حول العالم وتم تنفيذ SIMULA I لاحقًا على أجهزة كمبيوتر أخرى بما في ذلك Burroughs B5500 و Ural-16 الروسي .
في عام 1966، قدم CAR Hoare مفهوم بناء فئة التسجيل، والذي وسّعه Dahl و Nygaard بمفهوم البادئات والميزات الأخرى لتلبية متطلباتهم لمفهوم العملية المعممة. قدم Dahl و Nygaard ورقتهما حول إعلانات الفئة والفئة الفرعية في مؤتمر IFIP العامل حول لغات المحاكاة في أوسلو ، مايو 1967. أصبحت هذه الورقة أول تعريف رسمي لـ Simula 67. في يونيو 1967، عُقد مؤتمر لتوحيد اللغة وبدء عدد من التطبيقات. اقترح Dahl توحيد مفهوم النوع والفئة. أدى هذا إلى مناقشات جادة، ورفض المجلس الاقتراح. تم توحيد Simula 67 رسميًا في الاجتماع الأول لمجموعة معايير Simula (SSG) في فبراير 1968.

كان لـ Simula تأثير كبير في تطوير Smalltalk ولغات البرمجة الموجهة للكائنات لاحقًا . كما ساعد في إلهام نموذج الممثل للحوسبة المتزامنة على الرغم من أن Simula يدعم فقط الروتينات الفرعية وليس التزامن الحقيقي . [7]
في أواخر الستينيات وأوائل السبعينيات، كانت هناك أربعة تطبيقات رئيسية لـ Simula:
- UNIVAC 1100 من مركز الحوسبة النرويجي (NCC)
- نظام/360 ونظام /370 من NCC
- CDC 3000 من خلال تركيب الكمبيوتر المشترك لجامعة أوسلو في كيلر
- TOPS-10 من معهد أبحاث الدفاع الوطني السويدي (FOA)
تم نقل هذه التطبيقات إلى مجموعة واسعة من المنصات. نفذ TOPS-10 مفهوم المتغيرات والإجراءات العامة والمحمية والخاصة، والذي تم دمجه لاحقًا في Simula Standard في عام 1986.
يعد Simula Standard 1986 أحدث معيار ويتم نقله إلى مجموعة واسعة من المنصات. هناك أربعة تطبيقات رئيسية:
- محاكاة AS
- لوند سيمولا
- جنو سيم [8]
- إعادة النظر في برنامج Portable Simula [9]
في نوفمبر 2001، حصل دال ونيجارد على ميدالية جون فون نيومان من معهد مهندسي الكهرباء والإلكترونيات "لتقديم المفاهيم الأساسية للبرمجة الموجهة للكائنات من خلال تصميم وتنفيذ SIMULA 67". في أبريل 2002، حصلوا على جائزة تورينج لعام 2001 من جمعية آلات الحوسبة (ACM)، مع الاستشهاد: "للأفكار الأساسية لظهور البرمجة الموجهة للكائنات، من خلال تصميمهم للغات البرمجة Simula I وSimula 67." توفي دال ونيجارد في يونيو وأغسطس من ذلك العام على التوالي، [10] قبل محاضرة جائزة تورينج من ACM [11] التي كان من المقرر إلقاؤها في مؤتمر OOPSLA في نوفمبر 2002 في سياتل.
مختبر أبحاث سيمولا هو معهد أبحاث سُمي على اسم لغة سيمولا، وشغل نيجارد وظيفة بدوام جزئي هناك منذ افتتاحه في عام 2001. تم تسمية مبنى علوم الكمبيوتر الجديد في جامعة أوسلو باسم منزل أولي يوهان دال، تكريماً لدال، وتم تسمية القاعة الرئيسية باسم سيمولا.
كود العينة
برنامج الحد الأدنى
ملف الكمبيوتر الفارغ هو البرنامج الأدنى في Simula، والذي يتم قياسه بحجم الكود المصدر . وهو يتكون من شيء واحد فقط؛ عبارة وهمية .
ومع ذلك، يتم تمثيل البرنامج الأدنى بشكل أكثر ملاءمة على شكل كتلة فارغة:
بداية نهاية ؛
يبدأ التنفيذ وينتهي على الفور. تفتقر اللغة إلى أي قيمة إرجاع من البرنامج.
مرحبا بالعالم الكلاسيكي
مثال على برنامج Hello world في Simula:
بداية
OutText ("مرحبا بالعالم!");
Outimage ;
نهاية ;
Simula لا يميز بين الأحرف الكبيرة والصغيرة .
الفئات والفئات الفرعية والإجراءات الافتراضية
مثال أكثر واقعية مع استخدام الفئات، [1] : 1.3.3، 2 فئة فرعية [1] : 2.2.1 والإجراءات الافتراضية: [1] : 2.2.3
بداية حرف
الفصل ؛
افتراضي : إجراء الطباعة هو إجراء الطباعة؛؛
بداية
النهاية ؛
فئة
الحروف الرسومية Char (c)؛
الحرف c؛
بدء
إجراء الطباعة؛
OutChar(c);
نهاية ؛
فئة
الحروف الرسومية (العناصر)؛
مرجع (الحرف الرسومي) عناصر
المصفوفة ؛ بدء
إجراء الطباعة؛
بدء
عدد صحيح i؛
بالنسبة إلى i:= 1 الخطوة 1 حتى الحد الأعلى (العناصر، 1) افعل
العناصر (i).print؛
صورة خارجية؛
نهاية ;
نهاية ;
مرجع (رمز) rg؛
مصفوفة مرجع (رمز) rgs (1 : 4)؛
! البرنامج الرئيسي؛
rgs (1):- حرف جديد ('A');
rgs (2):- حرف جديد ('b');
rgs (3):- حرف جديد ('b');
rgs (4):- حرف جديد ('a');
rg:- سطر جديد (rgs)؛
rg.print؛
نهاية ؛
يحتوي المثال أعلاه على فئة فائقة واحدة (Glyph) مع فئتين فرعيتين ( Charو Line). يوجد إجراء افتراضي واحد به تنفيذان . يبدأ التنفيذ بتنفيذ البرنامج الرئيسي. يفتقر Simula إلى مفهوم الفئات المجردة ، حيث يمكن إنشاء مثيلات للفئات التي تحتوي على إجراءات افتراضية خالصة . هذا يعني أنه في المثال أعلاه، يمكن إنشاء مثيلات لجميع الفئات. ومع ذلك، سيؤدي استدعاء إجراء افتراضي خالص إلى حدوث خطأ وقت التشغيل .
اتصل بالاسم
يدعم Simula الاستدعاء بالاسم [1] : 8.2.3، لذا يمكن تنفيذ جهاز Jensen بسهولة. ومع ذلك، فإن وضع النقل الافتراضي للمعلمة البسيطة هو الاستدعاء بالقيمة ، على عكس ALGOL الذي استخدم الاستدعاء بالاسم . لذلك، يجب أن يحدد الكود المصدر لجهاز Jensen الاستدعاء بالاسم للمعلمات عند تجميعه بواسطة مُجمِّع Simula.
هناك مثال آخر أبسط بكثير وهو دالة الجمع والتي يمكن تنفيذها على النحو التالي:
الإجراء الحقيقي سيجما (k, m, n, u)؛
الاسم k, u؛
عدد صحيح k, m, n؛ حقيقي u؛
بداية
حقيقي s؛
ك:= م؛
بينما k <= n هل تبدأ s:= s + u؛ k:= k + 1؛ تنتهي ؛
سيجما:= س؛
نهاية ؛
يستخدم الكود أعلاه استدعاءً بالاسم للمتغير المتحكم (k) والتعبير (u). يسمح هذا باستخدام المتغير المتحكم في التعبير.
لاحظ أن معيار Simula يسمح ببعض القيود على المتغير المتحكم في حلقة for . لذلك يستخدم الكود أعلاه حلقة while لتحقيق أقصى قدر من قابلية النقل.
ما يلي:
ومن الممكن بعد ذلك تنفيذ ذلك على النحو التالي:
Z:= سيجما (i، 1، 100، 1 / (i + a) ** 2)؛
محاكاة
تتضمن Simula حزمة محاكاة [1] : 14.2 لإجراء عمليات محاكاة للأحداث المنفصلة . تعتمد حزمة المحاكاة هذه على ميزات Simula الموجهة للكائنات ومفهوم الروتين الفرعي [1] : 9.2 .
يتسوق سام وسالي وآندي لشراء الملابس. ويجب عليهم أن يتشاركوا غرفة قياس واحدة. ويتجول كل منهم في المتجر لمدة 12 دقيقة تقريبًا ثم يستخدم غرفة القياس حصريًا لمدة ثلاث دقائق تقريبًا، وكل منها يتبع توزيعًا طبيعيًا. وفيما يلي محاكاة لتجربة غرفة القياس الخاصة بهم:
محاكاة بدء غرفة تركيب
الفصل ؛ بدء باب
المرجع (الرأس)؛
القيمة المنطقية قيد الاستخدام؛
طلب الإجراء ؛ البدء
إذا كان قيد الاستخدام ، ثم البدء
انتظر (الباب)؛
الباب.أولا.خارج؛
نهاية ؛
inUse:= True ؛
نهاية ؛
إجراء leave؛ بداية
inUse:= False ؛
تنشيط door.First؛
نهاية ؛
الباب:- رأس
جديد ؛ النهاية ؛
تقرير الإجراء (الرسالة)؛ رسالة نصية ؛ البدء
OutFix (الوقت، 2، 0)؛ OutText (": " & الرسالة)؛ OutImage؛
نهاية ؛
عملية فئة الشخص (pname)؛ نص pname؛ ابدأ
بينما تكون صحيحة ابدأ
امسك (عادي (12، 4، و))؛
التقرير (pname & "يطلب غرفة القياس");
غرفة القياس 1.طلب؛
تقرير (pname & "دخل غرفة القياس");
امسك (عادي (3، 1، u));
غرفة القياس1.إجازة؛
تقرير (pname & "لقد غادر غرفة القياس");
نهاية ;
نهاية ;
عدد صحيح u؛
مرجع (غرفة التركيب) غرفة التركيب1؛
غرفة التركيب 1:- غرفة تركيب جديدة ؛
تفعيل شخص جديد ("سام");
تفعيل شخص جديد ("سالي");
تفعيل شخص جديد ("آندي");
امسك (100)؛
نهاية ؛
تم وضع البادئة ""للكتلة الرئيسية"" Simulationلتمكين المحاكاة. ويمكن استخدام حزمة المحاكاة على أي كتلة، ويمكن حتى تضمين عمليات المحاكاة عند محاكاة شخص ما يقوم بعمليات محاكاة.
يستخدم كائن غرفة القياس قائمة انتظار ( door) للوصول إلى غرفة القياس. عندما يطلب شخص ما غرفة القياس وهي قيد الاستخدام، يجب عليه الانتظار في قائمة الانتظار هذه ( Wait (door)). عندما يغادر شخص ما غرفة القياس، يتم تحرير أول شخص (إن وجد) من قائمة الانتظار ( Activate door.first) وبالتالي إزالته من قائمة انتظار الباب ( door.First.Out).
الشخص هو فئة فرعية من Processويتم وصف نشاطه باستخدام الانتظار (الوقت المستغرق في تصفح المتجر والوقت المستغرق في غرفة القياس) ويستدعي الإجراءات في كائن غرفة القياس لطلب غرفة القياس ومغادرتها.
يقوم البرنامج الرئيسي بإنشاء كافة الكائنات وتنشيط كافة كائنات الشخص لوضعها في قائمة الأحداث. ويحتفظ البرنامج الرئيسي بمدة 100 دقيقة من الوقت المحاكى قبل إنهاء البرنامج.
ملحوظات
- ^ abcdefghijklmn دال، أولي-جوهان ؛ ميرهوغ، بيورن؛ نيجارد ، كريستين (1970). اللغة الأساسية المشتركة (PDF) (أبلغ عن). مركز الحوسبة النرويجي. مؤرشف من الأصل بتاريخ 25-12-2013 . تم الاسترجاع في 17 نوفمبر 2020 .
{{cite report}}:CS1 maint: عنوان URL غير مناسب ( الرابط ) - ^ Nygaard, Kristen (1978). "The Development of the Simula Languages" (PDF) .
لقد تأثر تطوير .. SIMULA I وSIMULA 67... بتصميم SIMSCRIPT ...
- ^ كريستين نيجارد وأولي-جوهان دال. 1978. تطوير لغات SIMULA. تاريخ لغات البرمجة. رابطة آلات الحوسبة، نيويورك، نيويورك، الولايات المتحدة الأمريكية، 439-480. DOI:https://doi.org/10.1145/800025.1198392
- ^ وونغ، ويليام. "قبل C، ماذا كنت تستخدم؟". التصميم الإلكتروني . تم الاسترجاع في 22 مايو 2017 .
- ^ Holmevik, Jan Rune (1994). "Compiling Simula: A historical study of technical genesis" (PDF) . IEEE Annals of the History of Computing . 16 (4): 25–37. doi :10.1109/85.329756. S2CID 18148999. تم الاسترجاع في 12 مايو 2010 .
- ^ Holmevik, Jan Rune. "Compiling Simula". أوسلو، النرويج: معهد الدراسات في البحث والتعليم العالي. مؤرشف من الأصل في 20 أبريل 2009. تم الاسترجاع في 19 أبريل 2017 .
- ^ ليرمان مادسن ، أولي (2014). “بناء تجريدات التزامن الآمن”. في آغا، جول؛ إيجاراشي، أتسوشي؛ كوباياشي، ناوكي؛ ماسوهارا، هيدهيكو؛ ماتسوكا، ساتوشي؛ شيباياما، إتسويا؛ تورا، كينجيرو (محرران). الكائنات المتزامنة وما بعدها . ملاحظات محاضرة في علوم الكمبيوتر. المجلد. 8665. برلين: سبرينغر. ص. 68. دوى :10.1007/978-3-662-44471-9. رقم ISBN 978-3-662-44471-9. S2CID 1000741.
- ^ "GNU Cim".
- ^ "Portable Simula Revisited". GitHub . تم الاسترجاع في 17 يونيو 2019 .
- ^ "ACM Ole-Johan Dahl and Kristen Nygaard - Obituary". Acm.org. مؤرشف من الأصل في 19 يوليو 2011. تم الاسترجاع في 14 يناير 2012 .
- ^ "محاضرات جائزة تورينج من ACM". Informatik.uni-trier.de . تم الاسترجاع في 14 يناير 2012 .
مصادر
- سيلفستر، بيتر. "مترجم نظام IBM 360/370 والوثائق التاريخية" (معيار Simula والوثائق التاريخية الأخرى).
قراءة إضافية
- بولي، روب (1987)، مقدمة في البرمجة في سيمولا، ألفريد والر المحدودة، رقم ISBN 0632016116، تم أرشفته من الأصل في 2004-09-19
روابط خارجية
- الموقع الرسمي (آخر إصدار يعمل على archive.org، تم الوصول إليه في 2022-02-26)
- إعادة النظر في Portable Simula على GitHub
