سيمولا (لغة برمجة)

من ويكيبيديا، الموسوعة الحرة
اذهب إلى: تصفح، ‏ ابحث
سيمولا (لغة برمجة)

سيمولا هو اسم لغتين برمجة , سيمولا 1(Simula I) وسيمولا67 (Simula 67),تم تطويرهم في عام 1960 م في المركز النرويجي للحوسبة في اوسلوعن طريق اولي جوهان دال وكرستننيقارد. تركيب نحوي (Syntactically) إنها مجموعة معترف بها بشكل منصف من ALGOL 60.[1]:1.3.1

قدم سيمولا 67 كائنات(objects) ,فئات(3classes) , فئات فرعية(2subclasses) , طرق ظاهرية(virtual methods) , الروتين الثانوي(coroutines) ,محاكاة منفصلة الحدث(discrete event simulation) , جامع القمامة (garbage collection). يعتبر السيمولا أول لغة برمجة كائنية التوجه. كما يوحي به اسمة. صمم سيمولا لإداء المحاكاة ولتلبية احتياجات الإطارات المقدمة لبيئة العمل لكثير من لغات البرمجة كائنية التوجهالمستخدمة اليوم. أستخدم سيمولا في مجموعة واسعة من البرامج مثل محاكاة تصميم دارات التكامل الفائقVLSI ,عمليات النمذجة (process modeling) , ميثاق اتصالات (protocols) , خوارزمية (algorithms) , وفي غسرها من البرامج مثل التنضيد (typesetting) , رسومات الحاسب(computer graphics) وفي التعليم (education). منذ ان اعيد تنفيذ كائتنات سمولا في C++ ,الجافا(Java) , C#. غالباً ماتم الاستهانة بتأثير السيمولا. اعترف مخترع لغة ++C بينجامين ستروتروب (Bjarne Stroustrup) بأن السيمولا 67 كان له التأثير العظيم لجعلة يخترع C++, لتحقيق نوع من التحسينات في الإنتاجية التي تقدمها سيمولا لتسريع الحاسوبية الخام التي تقدمها لغات المستوى الأدنى مثل لغة البرمجة الأساسية المختلط (BCPL). لا يزال يستخدم سيمولالأنواع مختلفة من الدورات الدراسية الجامعية، على سبيل المثال قام جيريك سكلنار(Jarek Sklenar [3])بتعليم السيمولا للطلاب في جامعة مالطا.[2]

التاريخ[عدل]

ملحوظة المعلومات القادمة مبنية على المقالات التأريخية لجان رون.[3][4]

ابتدء كرستن نيقارد بكتابة برامج المجاكاة للحاسب في عام 1957 م. ورأى نيقارد احتياج لطريقة أفضل لوصف عدم التجانس ومجموعة التعليمات (operation) للنظام (system). لإكمال فكرتة على لغة برمجة رسمية لوصف النظام , استنتج نيقارد بأنة يحتاج إلى شخص ما يملك مهارات أكثر منه في كتابة البرامج.انضم اولي جوهان دال لعمل نيقارد في كانون الثاني يناير عام 1962 م. واتخذ قرار ربط اللغة لـALGOL 60 بعد فترة وجيزة من انضمام أولى. وضعت المفاهيم الأساسية للغة المحاكاة في شهر مايو 1962 م. ولدت سيمولا I كلغة برمجة لأغراض خاصة لمحاكات منفصلة لأحداث الأنظمة. تمت دعوة كرستن نيقار في لقاء لكي ينظم إلى UNIVAC في اخر شهر مايو 1962 م من اجل التسويق للحاسب الجديد UNIVAC 1107. في ذلك اللقاء استعرض نيقارد فكرتة سيمولا لمدير نظم البرمجة في Univac ريبورت بيمر. كان بيمر هاوً ومحلفاً عند ALGOLووجد ان مشروع سيمولا قاهر. وكان بيمر أيضاً يترئس موسم في المؤتمر الدولي الثاني حول معالجة المعلومات المستضاف من IFIP. وقد قام بدعوة نيقارد الذي قام بدورة باستعراض فكرتة سيمولا كامتداد لـ ALGOL لوصف فصل الحدث للشبكات. حصل المركز النرويجي للحوسبة على UNIVAC 1107 لانة على خصم كبير علية في أغسطس 1963 م. حيثنفذداهلسيمولا IبموجبالعقدمعUNIVAC. واستند التنفيذ على مترجم UNIVAC ALGOL 60 وشغل سيمولا I بكامل طاقته على حاسب UNIVAC 1107 في كانون الثاني يناير 1965. وخلال السنتين التالية قام داهل ونيقارد بصرف الكثير من الوقت لتعليم السيمولا I. وانتشر السيمولا I في دولتين حول العالم وشغل سيمولا I في وقت لاحق على حاسب Burroughs B5500 computers والروسي URAL-16 computer. في عام 1966 م قدم C. A. R. Hoareالمبدء في مفهوم سجل بناء الفئة والذي أمد دال ونيجاردلفهم مفهوم التقديم وغيرها من الميزات لتلبية احتياجاتهم لمفهوم عملية معممة. استعرضدالونيجاردفي شهر مايو 1967 م ورقتهم البحثية في مقرعمل مؤتمراتIFIPعنالفئة والفئة الفرعيةالاعلانية على لغات المحاكاة في اوسلو.وكانت هذه الورقة أول ورقة تعريفية رسمية للسيمولا 67. وفي شهر يونيو 1967 م عقد مؤتمر لتوحيد اللغة والشروع في عدد من التطبيقات. واقترح دال توحيد نوع ومفهوم الطبقة , وأدى ذلك إلى الكثير من النقاشات الجادة. ورفض الاقتراح من قبل المجلس. وفي شهر فبراير 1968 م أصبح سيمولا 67 موحد المعاييررسميافي الاجتماع الأول لمجموعة سيمولا. أصبح سيمولا مؤثراً لدى مطورين Smalltalk ولاحقاً object-oriented programming languages. وأيضاً ساعد في الهام Actor model لتزامن الحسابات , وأيضاً سيمولا كان الوحيد الذي يدعم co-routines وأيضاً التزامن الغير صحيح concurrency , في اواخر الستينيات وبداية السبعينيات كان هنالك اربع تطبيقات لدى سيمولا وهي :

  • UNIVAC 1100 by NCC
  • System/360 and System/370 by Swedish Research Institute for National Defence (FOA)
  • CDC 3000 by University of Oslo's Joint Computer Installation at Kjeller
  • TOPS-10 by ENEA AB

هذه التطبيقات نفذت لممجموعة واسعة من المنصات. الـ TOPS-10 لتنفيذ مفهوم العامة , المحمية , الطرق ومتغيرات العضو الخاص. وفي وقت لاحق تم دمجها لسيمولا 87. سيمولا 87 هو اخر المعايير وتم تنفيذة لمجموعة واسعة من المنصات , وبشكل أساسي هنالك ثلاث تطبيقات له وهي :

  • Simula AS
  • Lund Simula
  • GNU Cim - Download from the University of Oslo ftp site

في نوفمبر 2001 استلمداهلونيقارد جائزة لـ IEEE John von Neumann Medal لتقديمهم مفهومInstitute of Electrical and Electronic Engineers للمفاهيم الأساسية الكامنة لـobject-oriented programming من خلال تصميم وتطبيقات سيمولا 67. وفي شهر فبراير 2002 تسلموا جائزة 2001 وهي جائزة تورينغ Turing Award عن طريق جمعية الحاسبات والمكنات Association for Computing Machinery مع التنوية. للأفكار الأساسية في ظهور البرمجة الموجهة من خلال تصميمهم للغة البرمجة سيمولاوسيمولا 67. وللأسف كلاً من داهلونيقارد لم يتمكنوا من الوصول لمحاضرة جائزة تورينغ ACM Turing Award Lecture. ولقد تم الجدولة لتسليمهم الجائزة عن طريق مؤتمر OOPSLA في سياتل عام 2002 لأنهم توفوا بفارق شهرين عن بعضهم البعض في يونيو وأغسطس على التوالي. مركز ابحاث سيمولا Simula Research Laboratory هو معهد ابحاث سمي بعد لغة سيمولا. وقد قام نيقارد بعقد دوام جزئي هناك منذ افتتاحة عام 2001.

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

برنامج الحد الأدنى[عدل]

أن ملف الحاسب الفارغ computer file يكون برنامج الحد الأدنى في سيمولا. مقاس عن طريق الحجم للكود مصدريsource code انه يتألف من شيء واحد فقط وهو بيان (statement) الدمية. وعلى كل حال برنامج الحد الأدنى بشكل مريح يمثل بكتلة فارغة:

Begin
End;

يبدأ تنفيذ وينهي فورا , اللغة لايكون لها أي عائد (return value) من البرنامج نفسة.

كلمة مرحباً الكلاسيكية[عدل]

ملحوظة ان سيمولا حساس لحالة الأحرفcase-insensitive. مثال لبرنامج مرحباً ياعالم (Hello world program) في سيمولا:

Begin
   OutText ("Hello World!");
   Outimage;
End;

الطبقات ، والفئات الفرعية وطرق الظاهرية[عدل]

مثال أكثر واقعية للفئات[1]:1.3.3, 2, والفئات الفرعية [1]:2.2.1 والطرق الظاهرية [1]:2.2.3:

Begin
   Class Glyph;
      Virtual: Procedure print Is Procedure print;;
   Begin
   End;

   Glyph Class Char (c);
      Character c;
   Begin
      Procedure print;
        OutChar(c);
   End;

   Glyph Class Line (elements);
      Ref (Glyph) Array elements;
   Begin
      Procedure print;
      Begin
         Integer i;
         For i = 1 Step 1 Until UpperBound (elements, 1) Do
            elements (i).print;
         OutImage;
      End;
   End;

   Ref (Glyph) rg;
   Ref (Glyph) Array rgs (1 : 4);

   ! Main program;
   rgs (1):- New Char ('A');
   rgs (2):- New Char ('b');
   rgs (3):- New Char ('b');
   rgs (4):- New Char ('a');
   rg:- New Line (rgs);
   rg.print;
End;

المثال أعلاه يملك واحداً من الفئة العظمىsuper class (الشكل المنقوش) مع اثنين من الفئات الفرعية (subclasses) (شار والخط). وهناك طريق ظاهرية واحدة مع اثنين من التطبيقات implementations. التنفيذ يبدأ تنفيذ البرنامج الرئيسي. سيمولا ليس لديه مفهوم فئات مجردة الطبقات abstract classesمع أساليب الظاهرية البحتة pure virtual methodsيمكن تمثيلة instantiated. وهذا يعني أنه في المثال أعلاه جميع الطبقات يمكن تمثيلها. وسوف يدعو الطريقة الظاهري الصرفة (pure virtual method) ولكن على اية حال سوف ينتج خطأrun-time error.

نداء بالاسم[عدل]

يدعم سيمولاالنداء بالاسم call by name[1]:8.2.3 ولذلك يمكن بسهولة لجهاز جينسن Jensen's Device ان ينفذ.على اية حال , طور الانتقال الافتراضي لأجل المحيط البسيط يكون هو النداء بالقيمة call by value ,وهو عكس ALGOL الذي يستخدم النداء بالاسم (call by name). الكود المصدري لجهاز جينسنز Jensen's Device يوجب نداء بالاسم دعوة المحيط عندما يطلبها مترجم سيمولا. مثال اخر ابسط بكثير وهو للوظيفة الحسابية(summation function∑) الذي يمكن تطبيقه كما يلي :

Real Procedure Sigma (k, m, n, u);
   Name k, u;
   Integer k, m, n; Real u;
Begin
   Real s;
   k = m;
   While k <== n Do Begin s = s + u; k == k + 1; End;
   Sigma = s;
End;

المثال بالأعلى يستخدم نداء بالاسم call by name للتحكم بالمتغير (K) والمعبر U)). وهذا يسمح بالتحكم بالمتغير عن طريق المعبر. ملحوظة معايير سيمولا تسمح لقيود محددة في التحكم بالمتغير في حلقة واحدة (for loop).الكود الذي بالأعلى عندما تكون الحلقة في أقصى قابلية لها. ما يلي :  Z = \sum_{i=1}^{100}{1 \over (i + a)^2}

يمكن تنفيذه كالتالي :

Z = Sigma (i, 1, 100, 1 / (i + a) ** 2);

المحاكاة[عدل]

يتضمن سيمولامجموعة من المحاكات لفعل محاكاة منفصلة الحدث (discrete event simulations). هذه المجموعة مبنية على مفهوم ميزات والروتين البرمجة كائنية التوجه (object oriented) التابع لسيمولا. سام، سالي، واندي يتسوقون لشراء الملابس. يجب عليهم التشارك في غرفة واحدة لقياس الملابس. كل واحد منهم يستعرض المتجر لمدة 12 دقيقة ثم يستخدم غرفة القياس لمدة ثلاث دقائق فقط ، كلالتالي وزع توزيع عادي.محاكاة لتجربتهم غرفة القياس هي كما يلي :

Simulation Begin
   Class FittingRoom; Begin
      Ref (Head) door;
      Boolean inUse;
      Procedure request; Begin
         If inUse Then Begin
             Wait (door);
             door.First.Out;
         End;
         inUse = True;
      End;
      Procedure leave; Begin
         inUse = False;
         Activate door.First;
      End;
      door:- New Head;
   End;
  
   Procedure report (message); Text message; Begin
      OutFix (Time, 2, 0); OutText (": " & message); OutImage;
   End;

   Process Class Person (pname); Text pname; Begin
      While True Do Begin
         Hold (Normal (12, 4, u));
         report  (pname & " is requesting the fitting room");
         fittingroom1.request;
         report (pname & " has entered the fitting room");
         Hold (Normal (3, 1, u));
         fittingroom1.leave;
         report (pname & " has left the fitting room");
      End;
   End;

   Integer u;
   Ref (FittingRoom) fittingRoom1;

   fittingRoom1:- New FittingRoom;
   Activate New Person ("Sam");
   Activate New Person ("Sally");
   Activate New Person ("Andy");
   Hold (100);
End;

وتعد الكتلة الرئيسية الغير مسبوقة للمحاكاة هي تمكين المحاكاة. ويمكن استخدام.وحزمة المحاكاة يمكن استخدامها في الكتلة والمحاكاة ويمكنأنتتداخلحتىعندمانحاكيشخصيعمل المحاكاة.

العقبة الرئيسية للمحاكاة هي تمكين المحاكاة.وحزمة المحاكاة يمكن استخدامها في الكتلة والمحاكاة ويمكن أن تتداخل حتى عندما نحاكي شخص يعمل المحاكاة. الكائن هو غرفة القياس يستخدم قائمة الانتظار(door) للسماح له بالدخول إلى غرفة القياس. عندما يطلب شخص ما غرفة القياس وتكون مشغولة يجب أن ينتظر في قائمة الانتظار هذه (Wait (door)). وعندما يقوم شخص ما بالخروج من غرفة القياس الأول (اذا وجد) يتم تحريرها من قائمة الانتظار (Activate door.first) وإزالتها من قائمة الانتظار وفقا لذلك الباب (door.First.Out).

الشخص هوفئة فرعية من عملية ونشاطها يوصف بهانتظر(الوقت المتسغرق في استعراض المتجر والقت الذي قضي في غرفة قياس الملابس) ويستعد يأساليب الكائن المستخدم لغرفة القياس لطلب وترك غرفة القياس. البرنامج الرئيسي يخلق كل الكائنات وينشط جميع كائنات الشخص لوضعها في قائمة الانتظارالحدث. البرنامج الرئيسي ينتظر100 دقيقة من الوقت قبل أنهاء برنامج المحاكاة.

أنظر أيضا[عدل]

المراجع[عدل]

  1. ^ Ole-Johan Dahl, Bjørm Myhrhaug, and Kristen Nygaard (1970), :[1], Common Base Language, Norwegian Computing Center
  2. ^ http://staff.um.edu.mt/jskl1/
  3. ^ Holmevik، Jan Rune (1994). "Compiling Simula: A historical study of technological genesis". IEEE Annals in the History of Computing 16 (4): 25–37. اطلع عليه بتاريخ 12 May 2010. 
  4. ^ Jan Rune [2], Compiling Simula, Institute for Studies in Research and Higher Education, Oslo, Norway

المصدر[عدل]

وصلات خارجية[عدل]