Urbiscript - urbiscript - Wikipedia

urbiscript
Paradigmamulti-paradigma: objektově orientovaný, řízené událostmi, rozkazovací způsob, funkční, procesní, reflexní
NavrhlJean-Christophe Baillie
VývojářGostai a kol.
Poprvé se objevil2003; Před 17 lety (2003)
Stabilní uvolnění
2.7.4 / 17. listopadu 2011; Před 9 lety (2011-11-17)
Psací disciplínakachna, dynamický
OSCross-platform
LicenceLicence BSD[1]
Přípony názvu souboru.u
webová stránkagithub.com/ urbiforge/ urbi
Ovlivněno
C ++, ,[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 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 s jiný.
  • 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ódu chytit 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 a Koneč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é funkce tvrdit bloky, které lze použít k faktoru několika tvrdit 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

  1. ^ „Urbi, otevřený operační systém pro roboty“. Citováno 2012-10-27.
  2. ^ 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.
  3. ^ Baillie, Jean-Christophe. „Urbi: nový paralelní a událostmi řízený skriptovací jazyk pro robotiku, hry a další“. Youtube. Citováno 6. října 2011.
  4. ^ „Referenční příručka k jazyku urbiscript“. Citováno 2011-09-20.
  5. ^ A b Baillie, Jean-Christophe; Demaille, Akim; Nottale, Matthieu; Hocquet, Quentin (2010). „Tag: Job Control in urbiscript“ (PDF). Citováno 6. října 2011.
  6. ^ Baillie, Jean-Christophe; Demaille, Akim; Nottale, Matthieu; Hocquet, Quentin (2010). "Události! (Reaktivita v urbiscript)". arXiv:1010.5694 [cs.PL ].

externí odkazy