أوبرون-2
Oberon-2 هو امتداد للغة البرمجة Oberon الأصلية التي تضيف إمكانيات محدودة للبرمجة الانعكاسية (الانعكاس) والبرمجة الموجهة للكائنات ، والمصفوفات المفتوحة كأنواع أساسية للمؤشرات، وتصدير الحقول للقراءة فقط، وتعيد تقديم الحلقة من Modula-2 .FOR
طُوِّرت لغة البرمجة Oberon-2 عام 1991 في المعهد الفدرالي السويسري للتكنولوجيا في زيورخ (ETH Zurich) على يد نيكلاوس ويرث وهانزبيتر موسنبوك ، الذي يعمل حاليًا في معهد برمجيات الأنظمة (SSW) التابع لجامعة لينز في النمسا. وتُعدّ Oberon-2 نسخةً مُطوّرة من Oberon، وهي متوافقة معها تمامًا، كما أنها إعادة تصميم للغة Object Oberon .
ورثت لغة أوبرون-2 خاصية الانعكاس المحدود والوراثة الفردية ( "امتداد النوع") دون الواجهات أو المكونات الإضافية من أوبرون، لكنها أضافت أساليب افتراضية فعالة ("إجراءات مرتبطة بالنوع"). وكانت استدعاءات الأساليب تُحل في وقت التشغيل باستخدام جداول الأساليب الافتراضية على نمط لغة C++ .
بالمقارنة مع لغات البرمجة الكائنية التوجه بالكامل مثل سمول توك ، فإن أنواع البيانات الأساسية والفئات في أوبرون-2 ليست كائنات ، والعديد من العمليات ليست دوال، ولا يوجد تمرير للرسائل (يمكن محاكاته جزئيًا باستخدام الانعكاس وامتداد الرسائل، كما هو موضح في ETH Oberon)، ويقتصر تعدد الأشكال على الفئات الفرعية لفئة مشتركة (لا يوجد تعريف ديناميكي للأنواع كما في بايثون ، [ 1 ] ولا يمكن تعريف الواجهات كما في جافا ). لا تدعم أوبرون-2 التغليف على مستوى الكائن أو الفئة، ولكن يمكن استخدام الوحدات النمطية لهذا الغرض.
لا يستخدم الانعكاس في أوبرون-2 الكائنات الوصفية ، بل يقرأ ببساطة من مُعرّفات الأنواع المُجمّعة في الملفات التنفيذية، والمُتاحة في الوحدات التي تُعرّف الأنواع و/أو الإجراءات. إذا كان تنسيق هذه البنى مُتاحًا على مستوى اللغة (كما هو الحال في ETH Oberon، على سبيل المثال)، يُمكن تنفيذ الانعكاس على مستوى المكتبة . وبالتالي، يُمكن تنفيذه بالكامل تقريبًا على مستوى المكتبة، دون تغيير كود اللغة. في الواقع، تستفيد ETH Oberon بشكلٍ كبير من إمكانيات الانعكاس على مستوى اللغة والمكتبة.
توفر لغة Oberon-2 دعمًا مدمجًا أثناء التشغيل لجمع البيانات المهملة ، على غرار لغة Java، وتُجري عمليات فحص حدود الذاكرة وفهرس المصفوفات، وغيرها، مما يُزيل مشاكل الكتابة فوق حدود الذاكرة وحدود المصفوفات، بالإضافة إلى مشاكل إدارة الذاكرة اليدوية المتأصلة في لغتي C وC++. ويضمن التجميع المنفصل باستخدام ملفات الرموز ومساحات الأسماء عبر بنية الوحدات إعادة بناء سريعة، حيث لا يلزم إعادة تجميع سوى الوحدات ذات الواجهات المتغيرة.
لغة Component Pascal [ 2 ] هي تحسين (مجموعة شاملة) من Oberon-2.
مثال على التعليمات البرمجية
ينفذ الكود التالي الخاص بـ Oberon-2 شجرة ثنائية بسيطة:
أشجار الوحدات النمطية ؛TYPE Tree * = مؤشر إلى عقدة ; Node * = اسم السجل - : مؤشر إلى مصفوفة من الأحرف ; left , right : نهاية الشجرة ;إجراء ( t : شجرة ) إدراج * ( الاسم : مصفوفة من الأحرف ) ؛ متغير p ، الأب : شجرة ؛ ابدأ p : = t ؛ كرر الأب : = p ؛ إذا كان الاسم = p.name ^ ثم ارجع نهاية ؛ إذا كان الاسم < p.name ^ ثم p : = p.left وإلا p : = p.right نهاية حتى p = NIL ؛ جديد ( p ) ؛ p.left : = NIL ؛ p.right : = NIL ؛ جديد ( p.name ، طول ( الاسم ) + 1 ) ؛ نسخ ( الاسم ، p.name ^ ) ؛ إذا كان الاسم < الأب . name ^ ثم الأب . left : = p وإلا الأب . right : = p نهاية نهاية إدراج ؛إجراء ( t : شجرة ) بحث * ( الاسم : مصفوفة من الأحرف ) : شجرة ؛ متغير p : شجرة ؛ ابدأ p : = t ؛ طالما ( p # NIL ) و ( الاسم # p.name ^ ) افعل إذا كان الاسم < p.name ^ ثم p : = p.left وإلا p : = p.right نهاية نهاية ؛ أرجع p نهاية بحث ؛إجراء NewTree * (): Tree ; متغير t : Tree ; بداية جديد ( t ); جديد ( t . الاسم , 1 ); t . الاسم [ 0 ] := 0 X ; t . اليسار := لا شيء ; t . اليمين := لا شيء ; إرجاع t نهاية NewTree ;أشجار النهاية .امتدادات أوبرون-2 لأوبرون
المصدر: [ 3 ]
الإجراءات المرتبطة بالنوع
يمكن ربط الإجراءات بنوع سجل (أو مؤشر). وهي تعادل أساليب النسخ في مصطلحات البرمجة الكائنية.
تصدير للقراءة فقط
يمكن تقييد استخدام المتغيرات المصدرة وحقول السجلات بحيث يقتصر الوصول إليها على القراءة فقط. ويُشار إلى ذلك بعلامة "-" للرؤية.
المصفوفات المفتوحة
يمكن الآن تعريف المصفوفات المفتوحة التي كان من الممكن تعريفها سابقًا فقط كأنواع معلمات رسمية، كأنواع أساسية للمؤشرات.
بيان مؤيد
لم يتم تطبيق عبارة FORباسكال ومودولا-2 في أوبرون. وقد أعيد تقديمها في أوبرون-2.
التحقق من نوع وقت التشغيل
توفر لغة أوبرون-2 عدة آليات للتحقق من النوع الديناميكي للكائن. على سبيل المثال، عندما يتم إنشاء كائن من نوع Bird إما كـ Duck أو Cuckoo، فإن أوبرون-2 تسمح للمبرمج بالاستجابة للنوع الفعلي للكائن أثناء التشغيل.
النهج الأول، وهو الأكثر شيوعًا، يعتمد على نظام ربط الأنواع . أما النهج الثاني فيعتمد على استخدام WITHعبارة `require` ، التي تسمح بالتحقق المباشر من النوع الفرعي الديناميكي للمتغير. في كلتا الحالتين، بمجرد تحديد النوع الفرعي، يمكن للمبرمج استخدام أي إجراءات أو متغيرات مرتبطة بالنوع مناسبة لهذا النوع الفرعي. تُعرض أمثلة على هذه الأساليب أدناه.
تجدر الإشارة إلى أن صيغة WITHالعبارة المستخدمة في أوبرون-2 لا علاقة لها بعبارة WITH في باسكال ومودولا-2. هذه الطريقة المختصرة للوصول إلى حقول السجلات غير مُطبقة في أوبرون أو أوبرون-2.
ربط الأنواع
وحدة الطيور ؛ نوع الطائر * = تسجيل الصوت * : مصفوفة 10 من الأحرف ؛ نهاية ؛ نهاية الطيور .وحدة البط ؛ استيراد الطيور ؛TYPE Duck * = RECORD ( Birds . Bird ) END ;إجراء SetSound * ( متغير bird : بطة )؛ ابدأ bird.sound : = " كواك! " نهاية SetSound ؛ نهاية البط .وحدة طيور الوقواق ؛ استيراد الطيور ؛TYPE Cuckoo * = RECORD ( Birds . Bird ) END ;إجراء SetSound * ( متغير bird : Cuckoo ) ؛ ابدأ bird.sound : = " Cuckoo!" نهاية SetSound ؛ نهاية Cuckoos .WITHإفادة
اختبار الوحدة ؛ استيراد Out ، الطيور ، الوقواق ، البط ؛TYPE SomeBird * = RECORD ( Birds . Bird ) END ;VAR sb : SomeBird ; c : Cuckoos . Cuckoo ; d : Ducks . Duck ;إجراء SetSound * ( متغير bird : Birds.Bird ) ؛ ابدأ مع bird : Cuckoos.Cuckoo نفّذ bird.sound : = " Cuckoo ! " | bird : Ducks.Duck نفّذ bird.sound : = " Quack ! " وإلا bird.sound : = " Tweet ! " انتهى انتهى SetSound ؛إجراء MakeSound * ( متغير b : Birds.Bird ) ؛ ابدأ Out.Ln ؛ Out.String ( b.sound ) ؛ Out.Ln نهاية MakeSound ؛ابدأ بتعيين الصوت ( ج )؛ تعيين الصوت ( د )؛ تعيين الصوت ( ب )؛MakeSound ( c ); MakeSound ( d ); MakeSound ( sb ) END Test .POINTER
وحدة PointerBirds ؛ استيراد Out ؛TYPE BirdRec * = RECORD sound * : ARRAY 10 OF CHAR ; END ; DuckRec * = RECORD ( BirdRec ) END ; CuckooRec * = RECORD ( BirdRec ) END ;طائر = مؤشر إلى سجل الطيور ؛ وقواق = مؤشر إلى سجل الوقواق ؛ بطة = مؤشر إلى سجل البطة ؛VAR pb : طائر ; pc : طائر الوقواق ; pd : بطة ;إجراء SetDuckSound * ( bird : Duck ); BEGIN bird . sound : = "Quack!" END SetDuckSound ;إجراء SetCuckooSound * ( bird : Cuckoo ); BEGIN bird . sound : = "Cuckoo!" END SetCuckooSound ;إجراء SetSound * ( bird : Bird ); ابدأ مع bird : Cuckoo DO SetCuckooSound ( bird ) | bird : Duck DO SetDuckSound ( bird ) ELSE bird . sound : = "Tweet!" نهاية نهاية SetSound ;ابدأ جديد ( pc ); جديد ( pd );ضبط صوت الوقواق ( pc )؛ ضبط صوت البطة ( pd )؛Out.Ln;Out.String(pc^.sound);Out.Ln;Out.Ln;Out.String(pd^.sound);Out.Ln;SetSound(pc);SetSound(pd);Out.Ln;Out.String(pc^.sound);Out.Ln;Out.Ln;Out.String(pd^.sound);Out.Ln;(* -------------------------------------- *)(* Pass dynamic type to procedure *)pb:=pd;SetDuckSound(pb(Duck));Out.Ln;Out.String(pb^.sound);Out.Ln;pb:=pc;SetCuckooSound(pb(Cuckoo));Out.Ln;Out.String(pb^.sound);Out.Ln;(* -------------------------------------- *)SetSound(pb);Out.Ln;Out.String(pb^.sound);Out.Ln;pb:=pd;SetSound(pb);Out.Ln;Out.String(pb^.sound);Out.Ln;(* -------------------------------------- *)NEW(pb);SetSound(pb);Out.Ln;Out.String(pb^.sound);Out.LnENDPointerBirds.IS operator
A third approach is possible using the IS operator. This is a relation operator with the same precedence as equals (=), greater (>), etc. but which tests dynamic type. Unlike the two other approaches, however, it does not allow the programmer access to the subtype that has been detected.
Syntax
يتميز تطور عائلة لغات ALGOL → Pascal → Modula-2 → Oberon → Component Pascal بانخفاض تعقيد بناء الجملة . وقد وُصفت لغة Oberon-2 بالكامل ( موسنبوك وويرث، مارس 1995 ) باستخدام 33 قاعدة نحوية فقط في صيغة باكوس-ناور الموسعة ، كما هو موضح أدناه.
الوحدة = وحدة تعريف ";" [ قائمة الاستيراد ] تسلسل الإعلان [ بداية تسلسل البيان ] نهاية تعريف "." . قائمة الاستيراد = استيراد [ تعريف ":=" ] تعريف { "," [ تعريف ":=" ] تعريف } ";" . تسلسل الإعلان = { ثابت { إعلان ثابت ";" } | نوع { إعلان نوع ";" } | متغير { إعلان متغير ";" }} { إعلان إجراء ";" | إعلان توجيه ";" }. إعلان ثابت = تعريف تعريف "=" تعبير ثابت . إعلان نوع = تعريف تعريف تعريف "=" نوع . إعلان متغير = قائمة التعريف ":" نوع . إعلان إجراء = إجراء [ المُستقبِل ] تعريف تعريف تعريف [ الأجزاء الرسمية ] ";" تسلسل الإعلان [ بداية تسلسل البيان ] نهاية تعريف . ForwardDecl = PROCEDURE "^" [ Receiver ] IdentDef [ FormalPars ]. FormalPars = "(" [ FPSection { ";" FPSection }] ")" [ ":" Qualident ]. FPSection = [ VAR ] ident { "," ident } ":" Type . Receiver = "(" [ VAR ] ident ":" ident ")" . Type = Qualident | ARRAY [ ConstExpr { "," ConstExpr }] OF Type | RECORD [ "(" Qualident ")" ] FieldList { ";" FieldList } END |مؤشر إلى النوع | الإجراء [ FormalPars ].FieldList = [ IdentList " :" Type ] .StatementSeq = Statement { ";" Statement } .Statement = [ Designator ":=" Expr | Designator [ "(" [ ExprList ] ")" ] | IF Expr THEN StatementSeq { ELSIF Expr THEN StatementSeq } [ ELSE StatementSeq ] END | CASE Expr OF Case { "|" Case } [ ELSE StatementSeq ] END | WHILE Expr DO StatementSeq END | REPEAT StatementSeq UNTIL Expr | FOR ident ":=" Expr TO Expr [ BY ConstExpr ] DO StatementSeq END | LOOP StatementSeq END | WITH Guard DO StatementSeq { "|" Guard DO StatementSeq } [ ELSE StatementSeq ] END | EXIT | RETURN [ Expr ] ]. الحالة = [ تسميات الحالة { "," تسميات الحالة } ":" StatementSeq ]. تسميات الحالة = ConstExpr [ "." ConstExpr ]. الحارس = Qualident ":" Qualident . ConstExpr = Expr . Expr = SimpleExpr [ Relation SimpleExpr ]. SimpleExpr = [ "+" | "-" ] Term { AddOp Term }. Term = Factor { MulOp Factor }.العامل = المُعرِّف [ "(" [ قائمة التعبيرات ] ")" ] | رقم | حرف | سلسلة نصية | لا شيء | مجموعة | "("Expr ")" | "~" Factor . Set = "{" [ Element { "," Element }] "}" . Element = Expr [ ".." Expr ]. Relation = "=" | "#" | "<" | "<=" | ">" | ">=" | IN | IS . AddOp = "+" | "-" | OR . MulOp = "*" | "/" | DIV | MOD | "&" . Designator = Qualident { "." ident | "[" ExprList "]" | "^" | "(" Qualident ")" }. ExprList = Expr { "," Expr }. IdentList = IdentDef { "," IdentDef }. Qualident = [ ident "." ] ident . IdentDef = ident [ "*" | "-" ].التطبيقات
تتضمن برامج تجميع Oberon-2 التي تديرها ETH إصدارات لأنظمة Windows و Linux و Solaris و macOS .
يُترجم مُصرّف أكسفورد أوبرون-2 إلى لغة الآلة الأصلية، ويمكنه استخدام مُترجم فوري (JIT) على أنظمة ويندوز ولينكس وماك أو إس. وقد أنشأه ويُديره مايك سبيفي، ويستخدم آلة كيكو الافتراضية. [ 4 ] [ 5 ]
يوجد ماسح ضوئي لغوي من نوع Oberon-2 Lex ومحلل Yacc من تطوير ستيفن ج. بيفان من جامعة مانشستر بالمملكة المتحدة، وهو مبني على ما ورد في مرجع موسنبوك وويرث. وهو في الإصدار 1.4.
هناك إصدار يسمى Native Oberon يتضمن نظام تشغيل، ويمكن تشغيله مباشرة على أجهزة الكمبيوتر الشخصية.
تم تطوير تطبيق .NET لـ Oberon مع إضافة بعض الامتدادات الطفيفة المتعلقة بـ .NET في ETHZ.
بيئة تطوير البرمجيات المفتوحة للمبرمجين (POW!) [ 6 ] هي بيئة تطوير متكاملة بسيطة للغاية ، مزودة بمحرر، ورابط، ومترجم Oberon-2. تُنتج هذه البيئة ملفات تنفيذية لنظام ويندوز . يتوفر الكود المصدري الكامل ، والمترجم مكتوب بلغة Oberon-2.
تمت كتابة مُترجم جافا إلى أوبرون (JOB) في جامعة فولوغدا بروسيا. يُنتج هذا المُترجم شيفرة كائنية على شكل ملفات فئات جافا ( بايت كود ). كما يُوفر بعض الفئات الخاصة بـ JOB المتوافقة مع جافا، ولكنها تستخدم تسلسلًا هرميًا للمكونات أقرب إلى أوبرون.
يقوم برنامج Optimizing Oberon-2 Compiler بالترجمة إلى لغة C، باستخدام مجموعة أدوات GNU Compiler Collection (GCC) لتوليد البرامج.
Oberon Script هو مُترجم يُحوّل لغة Oberon الكاملة إلى JavaScript . المترجم مكتوب بلغة JavaScript، وبالتالي يمكن استدعاؤه من صفحات الويب لمعالجة البرامج النصية المكتوبة بلغة Oberon.
نظام XDS Modula2/Oberon2 هو نظام تطوير من إنتاج شركة Excelsior LLC، نوفوسيبيرسك، روسيا. يحتوي على مُترجم مُحسِّن لمعالجات Intel Pentium ، أو مُترجم "via-C" لتطوير البرمجيات متعددة المنصات . وهو متوفر لأنظمة Windows وLinux. كُتب المُترجم بلغة Oberon-2 ويقوم بتجميع نفسه تلقائيًا.
مشروع Oberon Revival هو مشروع يهدف إلى جلب Oberon 2 و Component Pascal ( BlackBox Component Builder ) إلى Linux و Win32. لم يكن إصدار Linux من BlackBox متاحًا من قبل، وكان يعمل في الأصل على Microsoft Windows فقط.
XOberon هو نظام تشغيل في الوقت الحقيقي لـ PowerPC ، مكتوب بلغة Oberon-2.
تم تطوير برنامج تجميع أوبرون-2 المحمول (OP2) لنقل نظام أوبرون إلى المنصات المتوفرة تجارياً. [ 7 ]
بايت كود كيكو
يمكن لـ Oberon-2 استهداف آلة Keiko الافتراضية. [ 8 ] [ 9 ] على سبيل المثال، مثل بعض مترجمات اللغات الأخرى (انظر O-code و p-code وما إلى ذلك)، يقوم مترجم Oxford Oberon-2 أولاً بالترجمة إلى بايت كود وسيط (بايت كود Keiko) والذي يمكن تفسيره باستخدام مترجم بايت كود أو استخدام الترجمة في الوقت المناسب .
انظر أيضاً
مراجع
- ↑ "قراءات ذات صلة" . دكتور دوبز .
- ↑ بفايستر، كونو (2001). "ما الجديد في كومبوننت باسكال (التغييرات من أوبرون-2 إلى CP)" (ملف PDF) . أنظمة أوبرون الدقيقة . مؤرشف من الأصل (ملف PDF) في 15 مايو 2011. تم الاطلاع عليه في 10 يناير 2007 .
- ↑ الاختلافات بين أوبرون وأوبرون-2، موسنبوك وويرث (1993)
- ↑ سبيفي، مايكل (2014). مواصفات كيكو . ركن سبيفي (تقرير). كلية أوريل، جامعة أكسفورد. مؤرشف من الأصل في 4 مارس 2016. تم الاطلاع عليه في 9 يوليو 2023 .
- ↑ سبيفي، مايكل (30 سبتمبر 2020). نظرة عامة على تصميم OBC: آلة كيكو المجردة . ركن سبيفي (تقرير). كلية أوريل، جامعة أكسفورد . تم الاطلاع عليه في 9 يوليو 2023.
يقوم مُترجم أكسفورد أوبرون-2 بترجمة البرامج المصدرية إلى شفرة لآلة مجردة قائمة على المكدس. ... آلة كيكو.
- ↑ كولينجبورن، هـ. (فبراير 2000). "ماذا فعل مخترع لغة باسكال بعد ذلك؟". مجلة بي سي بلس . العدد 160.
- ↑ كريلييه، ريجيس (1994). التجميع المنفصل وتوسيع الوحدات (أطروحة دكتوراه). المعهد الفدرالي السويسري للتكنولوجيا في زيورخ. doi : 10.3929/ethz-a-000945227 . hdl : 20.500.11850/141604 . تاريخ الاسترجاع: 18 نوفمبر 2018 .
- ↑ د. مايكل سبيفي. "مواصفات كيكو" .
- ↑ د. مايكل سبيفي. "نظرة عامة على تصميم OBC: آلة كيكو المجردة" . اقتباس: "يقوم مُترجم أكسفورد أوبرون-2 بترجمة البرامج المصدرية إلى شفرة لآلة مجردة قائمة على المكدس... آلة كيكو".
للمزيد من القراءة
- " شجرة أنساب لغة أوبرون " التي يتم الاحتفاظ بها في ETHZ
- "المؤتمر الدولي الثاني لـ Modula-2"، سبتمبر 1991.
- من Modula إلى Oberon مؤرشف في 23 فبراير 2014 في Wayback Machine Wirth (1990)
- البرمجة بلغة أوبرون - نسخة مشتقة من كتاب البرمجة بلغة مودولا-2 ويرث (1982)
- لغة البرمجة، أوبرون ويرث (1990)
- لغة البرمجة Oberon-2 H. Mössenböck, N. Wirth, Institut für Computersysteme, ETH Zurich ، يناير 1992 والبرمجة المنظمة (1991) 12(4): 179-195.
- مراجع متنوعة بما في ذلك النسخ الإلكترونية عبر الإنترنت
- البرمجة الكائنية في أوبرون-2، تأليف هانزبيتر موسنبوك (1994). (متوفر من جامعة يوهانس كيبلر بصيغة PDF بإذن من دار نشر سبرينغر).
- أنماط التصميم في أوبرون-2 وكومبونت باسكال
- مشروع أوبرون. تصميم نظام تشغيل ومترجم نيكلاوس ويرث ويورغ غوتكنيشت (2005)
- مشروع أوبرون. تصميم نظام تشغيل ومترجم نيكلاوس ويرث ويورغ غوتكنيشت (2013)
روابط خارجية
- الموقع الرسمي ، المعهد الفدرالي السويسري للتكنولوجيا في زيورخ
- صفحة مرجعية عن أوبرون في المعهد الفدرالي السويسري للتكنولوجيا في زيورخ
- أوبرون في إس إس دبليو، لينز
- شرح لعبة باو (باللغة الرومانية)، من إعداد دان بوبا
- نموذج انعكاس أوبرون-2 وتطبيقاته
- عائلة لغات البرمجة Modula
- لغات البرمجة الكائنية التوجه
- عائلة لغات البرمجة أوبرون
- لغات البرمجة التي تم إنشاؤها عام 1991
