Urbiscript - urbiscript - Wikipedia
Paradigma | multi-paradigma: objektově orientovaný, řízené událostmi, rozkazovací způsob, funkční, procesní, reflexní |
---|---|
Navrhl | Jean-Christophe Baillie |
Vývojář | Gostai a kol. |
Poprvé se objevil | 2003 |
Stabilní uvolnění | 2.7.4 / 17. listopadu 2011 |
Psací disciplína | kachna, dynamický |
OS | Cross-platform |
Licence | Licence BSD[1] |
Přípony názvu souboru | .u |
webová stránka | github |
Ovlivněno | |
C ++, Já,[2] Io[2] |
urbiscript je programovací jazyk pro robotiku.[3] Obsahuje syntaktickou podporu pro souběžnost a programování na základě událostí. Je to na základě prototypu objektově orientovaný skriptovací jazyk. Je to dynamické: rozlišení jmen se provádí během provádění programu (pozdní vazba ); sloty (členské proměnné ) lze přidat / odebrat za běhu, a dokonce i prototypy (nadtřídy ) objektu lze změnit za běhu.
Správa paměti provádí počítání referencí.
Pevně svázán s Platforma Urbi podporuje bezproblémovou integraci komponent C ++ / Java.
Syntaxe a sémantika
Inspirace
Ze syntaktického hlediska patří urbiscript k C - rodina programovacích jazyků.
Jeho prototypový objektově orientovaný design byl ovlivněn Já a Io programovací jazyky.[2]
Je navržen k programování, ale také k interakci s roboty;[2] jako takový je ovlivněn Unix skořápky a další jazyky, které poskytují smyčka čtení-eval-tisk styl interaktivní toplevel. Na rozdíl od ostatních však neexistuje žádná výzva k zadání uživatele, ale odpovědi ze systému jsou předponovány časovým razítkem (v milisekundách) mezi hranatými závorkami:
1 + 1; spánek (1 s); 1 + 2 * 3;
- [00005420] 2
- [00006420] 7
Sekvenční příkazy a tok řízení
Příkazy urbiscript zahrnují (mimo jiné):[4]
- The
-li
prohlášení, který podmíněně provede blok kódu spolu sjiný
. - Tradiční
pro
prohlášení, jako v C, které iteruje přes iterovatelný objekt, zachycuje každý prvek do místní proměnné pro použití připojeným blokem. - Další
pro
prohlášení, který iteruje nad iterovatelným objektem a zachycuje každý prvek do místní proměnné pro použití připojeným blokem. - The
zatímco
prohlášení, který provádí blok kódu, pokud je splněna jeho podmínka. - The
Snaž se
prohlášení, který umožňuje zachycení a zpracování výjimek vyvolaných v připojeném bloku kóduchytit
doložky. Volitelnéjiný
klauzule je spuštěna, pokud nebyla vyvolána žádná výjimka. Je možné zaručit, že kód pro vyčištění bude spuštěn v každém případě, pokud je uveden v aKonečně
-doložka. - The
tvrdit
prohlášení, který se používá během ladění ke kontrole podmínek, které by měly platit. urbiscript také funkcetvrdit
bloky, které lze použít k faktoru několikatvrdit
prohlášení.
Ve skutečnosti, na rozdíl od většiny jazyků podobných C a navzdory tomu, co naznačuje syntaxe, příkazy „mají hodnotu“, a proto jsou výrazy, pokud jsou vloženy do složených závorek:
var postavení = { -li (Zavřeno) "Zavřeno" jiný "otevřeno" }; var složit = { Snaž se { foo } chytit { Nepravdivé } jiný { skutečný } };
Souběžné příkazy a tok řízení
V urbiscript mají některé konstrukty řízení a toku několik „příchutí“: dva typy sekvenčního složení a dva typy souběžného složení. Pod kapotou je souběžnost implementována pomocí coutiny.[5]
Složení výpisu
Stejně jako v C středník označuje postupné složení: a; b
znamená „běh příkazu A
pak spusťte příkaz b
. Mezi nimi mohou být spuštěny další úkoly A
a b
. Další oddělovač příkazů, pipe, označuje „těsné sekvenční složení“: nelze mezi nimi spustit žádný jiný úkol A
a b
v a | b
.
Podobně urbiscript obsahuje dva způsoby souběžného vytváření příkazů. S a, b
, za prvé A
je spuštěna a v určitém okamžiku b
bude --- možná chvíli A
stále běží. To je velmi podobné &
operátor v Unix skořápkách. Případně s a & b
, oba A
a b
jsou spuštěny společně; v interaktivních relacích to znamená A
nebude spuštěn, dokud b
je plně zadáno a správně následováno buď a ;
nebo a ,
.
Rozsahy jsou hranice pro úlohy na pozadí, jak ukazuje následující příklad:[5]
{ { spát(2 s); echo(2) }, { spát(1 s); echo(1) }, }; echo(3);
- [00012451] *** 1
- [00013447] *** 2
- [00013447] *** 3
Souběžné příchutě sekvenčních konstruktů
Většina cyklických konstrukcí v urbiscript má několik „příchutí“, které jsou založeny na čtyřech oddělovačích příkazů: ;
, |
, ,
, a &
.
Například
// Toto je ve skutečnosti „for;“. pro (var i : [0, 1, 2]) { echo(i); echo(i ** 2); };
displeje
- [00002919] *** 0
- [00002921] *** 0
- [00002921] *** 1
- [00002922] *** 1
- [00002922] *** 2
- [00002922] *** 4
tj. těla smyčky se neprovádějí postupně, zatímco pro&
klíčové slovo spustí těla smyčky současně:
pro& (var i : [0, 1, 2]) { echo(i); echo(i ** 2); };
- [00021680] *** 0
- [00021680] *** 1
- [00021680] *** 2
- [00021682] *** 0
- [00021682] *** 1
- [00021682] *** 4
Událostní programování
Zaměřené na vývoj přenosných robotických aplikací,[6] urbiscript spoléhá na konkrétní syntaktické konstrukty, které specifikují reaktivní chování, například „přejít do nabíjecího doku, když je baterie vybitá“, „přehrát přátelský zvuk, když je rozpoznána známá tvář“ nebo „zastavit, když je detekována překážka“.
Explicitní zpracování událostí
Zpracování událostí jde do tří kroků. Nejprve definujte událost
var E = událost.Nový;
Za druhé, určete obslužné rutiny událostí
na (E?) echo("přijatá událost e");
Za třetí, „emitovat“ tuto událost
E!;
- [00014333] *** přijatá událost e
Události mohou mít užitečné zatížení a obsluhy událostí si užívají porovnávání vzorů na užitečném zatížení:
na (E?(1, var X) -li X % 2 == 0) echo("přijatá událost e (1,% s)" % X); E!(1, 1);
- [00014336] *** přijatá událost e
E!(1, 2);
- [00014336] *** přijatá událost e
- [00014336] *** přijatá událost e (1, 2)
Implicitní události
Jazyk urbiscript také umožňuje sledovat výrazy:
na (úroveň baterie <= 0.2) robot.goToChargingDock;
Následující příklad ukazuje funkci:
var X = 0;
- [00002165] 0
var y = 0;
- [00002166] 0
var z = 0;
- [00002167] 0
na (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
Viz také
Reference
- ^ „Urbi, otevřený operační systém pro roboty“. Citováno 2012-10-27.
- ^ A b C d Baillie, Jean-Christophe; Demaille, Akim; Nottale, Matthieu; Hocquet, Quentin; Tardieu, Samuel (2008). „Univerzální platforma Urbi pro robotiku“ (PDF). Citováno 6. října 2011.
- ^ Baillie, Jean-Christophe. „Urbi: nový paralelní a událostmi řízený skriptovací jazyk pro robotiku, hry a další“. Youtube. Citováno 6. října 2011.
- ^ „Referenční příručka k jazyku urbiscript“. Citováno 2011-09-20.
- ^ Baillie, Jean-Christophe; Demaille, Akim; Nottale, Matthieu; Hocquet, Quentin (2010). "Události! (Reaktivita v urbiscript)". arXiv:1010.5694 [cs.PL ].