أوربيسكريبت
لغة urbiscript هي لغة برمجة خاصة بالروبوتات. [ 3 ] تتميز بدعمها النحوي للتزامن والبرمجة القائمة على الأحداث. وهي لغة برمجة نصية كائنية التوجه تعتمد على النماذج الأولية . تتميز بديناميكيتها: حيث يتم تحديد أسماء المتغيرات أثناء تنفيذ البرنامج ( الربط المتأخر )؛ ويمكن إضافة/إزالة خانات ( متغيرات الأعضاء ) أثناء التشغيل، بل ويمكن تغيير النماذج الأولية ( الفئات العليا ) للكائن أثناء التشغيل.
تتم إدارة الذاكرة عن طريق عد المراجع .
وهو مرتبط بمنصة Urbi ويدعم دمج مكونات C++/Java.
بناء الجملة والدلالات
إلهام
من وجهة النظر النحوية، تنتمي لغة urbiscript إلى عائلة لغات البرمجة C.
تأثر تصميمها القائم على النموذج الأولي والموجه للكائنات بلغات البرمجة Self و Io . [ 2 ]
صُمم هذا البرنامج للبرمجة والتفاعل مع الروبوتات؛ [ 2 ] ولذلك، فهو متأثر بأنظمة يونكس وغيرها من اللغات التي توفر نمط حلقة القراءة والتقييم والطباعة التفاعلية على مستوى النظام. مع ذلك، وخلافًا للبرامج الأخرى، لا يوجد مطالبة بإدخال المستخدم، بل تُسبق إجابات النظام بطابع زمني (بالمللي ثانية) بين قوسين مربعين.
1 + 1؛ sleep(1s)؛ 1 + 2 * 3؛
- [00005420] 2
- [00006420] 7
العبارات المتسلسلة وتدفق التحكم
تتضمن بيانات urbiscript (من بين أمور أخرى): [ 4 ]
- العبارة التي تنفذ
ifبشكل مشروط كتلة من التعليمات البرمجية، بالإضافة إلىelse. forالعبارة التقليدية ، كما في لغة C، والتي تتكرر على كائن قابل للتكرار، وتلتقط كل عنصر في متغير محلي لاستخدامه بواسطة الكتلة المرفقة.forعبارة أخرى ، تقوم بالتكرار على كائن قابل للتكرار، وتلتقط كل عنصر في متغير محلي لاستخدامه بواسطة الكتلة المرفقة.- العبارة التي تنفذ كتلة من التعليمات البرمجية طالما أن شرطها صحيح
while. - تسمح هذه
tryالعبارة بالتقاط ومعالجة الاستثناءات التي تُثار في كتلة التعليمات البرمجية المرفقة بها بواسطةcatchبنود أخرى. ويتم تنفيذ بند اختياريelseإذا لم يُثر أي استثناء. ويمكن ضمان تنفيذ تعليمات التنظيف في كل حالة عند تضمينها فيfinallyبند آخر. - تُستخدم هذه
assertالعبارة أثناء تصحيح الأخطاء للتحقق من الشروط التي ينبغي تطبيقها. كما تتضمن لغة urbiscriptassertكتلًا برمجية، يمكن استخدامها لتقسيم عدةassertعبارات.
Actually, contrary to most C-like languages and despite what the syntax suggests, statements "have a value", and therefore are expressions, provided they are embedded in braces:
varstatus={if(closed)"closed"else"open"};varpass={try{foo}catch{false}else{true}};Concurrent statements and control flow
In urbiscript, some control-flow constructs come in several "flavors": two types of sequential composition, and two types of concurrent composition. Under the hood, concurrency is implemented using coroutines.[5]
Statement composition
Like in C, the semicolon denotes sequential composition: a;b stands for "run statement a then run statement b. Other tasks may be run between a and b. Another statement separator, pipe, denotes "tight sequential composition": no other task can be run between a and b in a|b.
Similarly urbiscript features two means to compose statements concurrently. With a,b, first a is run, and at some point b will be --- possibly while a is still running. This is very similar to the & operator in Unix shells. Alternatively, with a&b, both a and b are started together; in interactive sessions, this means that a won't be run until b is fully entered and properly followed by either a ; or a ,.
Scopes are boundaries for backgrounded jobs, as demonstrated in the following example:[5]
{{sleep(2s);echo(2)},{sleep(1s);echo(1)},};echo(3);- [00012451] *** 1
- [00013447] *** 2
- [00013447] *** 3
Concurrent flavors of sequential constructs
Most looping constructs in urbiscript come in several "flavors", which are based on the four statement separators: ;, |, ,, and &.
For instance
// This is actually "for;".for(vari:[0,1,2]){echo(i);echo(i**2);};displays
- [00002919] *** 0
- [00002921] *** 0
- [00002921] *** 1
- [00002922] *** 1
- [00002922] *** 2
- [00002922] *** 4
i.e., the loop bodies are not executed sequentially, while the for& keyword runs the loop bodies concurrently:
for&(vari:[0,1,2]){echo(i);echo(i**2);};- [00021680] *** 0
- [00021680] *** 1
- [00021680] *** 2
- [00021682] *** 0
- [00021682] *** 1
- [00021682] *** 4
Event-based programming
Aiming at the development of portable robotic applications,[6] urbiscript relies on specific syntactic constructs to specify reactive behaviors such as "go to the charging dock when the battery is low", "play a friendly sound when a known face is recognized", or "stop when an obstacle is detected".
Explicit event handling
Event handling goes into three steps. First, define an event
vare=Event.new;Second, specify event handlers
at(e?)echo("received event e");Third, "emit" this event
e!;- [00014333] *** received event e
Events can have payloads, and event handlers enjoy pattern matching on the payload:
at(e?(1,varx)ifx%2==0)echo("received event e(1, %s)"%x);e!(1,1);- [00014336] *** received event e
e!(1,2);- [00014336] *** received event e
- [00014336] *** received event e(1, 2)
Implicit events
The urbiscript language also allows to monitor expressions:
at(batteryLevel<=0.2)robot.goToChargingDock;The following example demonstrates the feature:
varx=0;- [00002165] 0
vary=0;- [00002166] 0
varz=0;- [00002167] 0
عند ( x + y == z ) echo ( "%s + %s == %s" % [ x , y , z ]);- [00002168] *** 0 + 0 == 0
x = 1 ;- [00002169] 1
z = 1 ;- [00002170] 1
- [00002170] *** 1 + 0 == 1
انظر أيضاً
مراجع
- ↑ "أوربي، نظام التشغيل مفتوح المصدر للروبوتات" . مؤرشف من الأصل بتاريخ 30 أكتوبر 2012. تم الاطلاع عليه بتاريخ 27 أكتوبر 2012 .
- 1 2 3 4 بيلي، جان كريستوف؛ ديميل، أكيم؛ نوتال، ماتيو؛ هوكيت، كوينتين؛ تارديو، صموئيل (2008). “منصة Urbi العالمية للروبوتات” (PDF) . تم الاسترجاع 6 أكتوبر 2011 .
- ↑ بايلي، جان كريستوف (8 يوليو 2008). "أوربي: لغة برمجة نصية جديدة متوازية وقائمة على الأحداث للروبوتات والألعاب وغيرها" . يوتيوب . تم الاطلاع عليه في 6 أكتوبر 2011 .
- ↑ "دليل مرجعي للغة أوربيسكريبت" . تم الاطلاع عليه بتاريخ 20-09-2011 .
- ↑ بايلي، جان كريستوف؛ ديماي، أكيم؛ نوتال، ماثيو؛ هوكيه، كوينتين (2010). "الأحداث! (التفاعلية في المخطوطة القديمة)". arXiv : 1010.5694 [ cs.PL ].
روابط خارجية
- عائلة لغات البرمجة C
- لغات البرمجة ذات الكتابة الديناميكية
- مترجمون فوريون مجانيون ومفتوحو المصدر
- برامج مجانية متعددة المنصات
- لغات البرمجة عالية المستوى
- لغات البرمجة الكائنية التوجه
- لغات البرمجة التي تم إنشاؤها في عام 2003
- لغات البرمجة القائمة على النماذج الأولية
- لغات البرمجة النصية
- لغات البرمجة النصية
- لغات برمجة الروبوتات
