stringtranslate.com

escritura urbi

Urbiscript es un lenguaje de programación para robótica. [3] Cuenta con soporte sintáctico para concurrencia y programación basada en eventos. Es un lenguaje de scripting orientado a objetos basado en prototipos . Es dinámico: la resolución de nombres se realiza durante la ejecución del programa ( enlace tardío ); se pueden agregar/eliminar ranuras ( variables miembro ) en tiempo de ejecución, e incluso se pueden cambiar prototipos ( superclases ) de un objeto en tiempo de ejecución.

La gestión de la memoria se realiza mediante el conteo de referencias .

Estrechamente vinculado a la plataforma Urbi, admite la integración perfecta de componentes C++/Java.

Sintaxis y semántica

Inspiración

Desde el punto de vista sintáctico, urbiscript pertenece a la familia C de lenguajes de programación.

Su diseño orientado a objetos basado en prototipos fue influenciado por los lenguajes de programación Self e Io . [2]

Está diseñado para programar, pero también para interactuar con robots; [2] como tal, está influenciado por los shells de Unix y otros lenguajes que proporcionan un nivel superior interactivo de estilo bucle de lectura-evaluación-impresión . Sin embargo, a diferencia de otros, no hay un mensaje para la entrada del usuario, sino que las respuestas del sistema están precedidas por una marca de tiempo (en milisegundos) entre corchetes:

1 + 1; dormir(1s); 1 + 2 * 3;
[00005420] 2
[00006420] 7

Sentencias secuenciales y flujo de control

Las declaraciones de urbiscript incluyen (entre otras): [4]

En realidad, a diferencia de la mayoría de lenguajes tipo C y a pesar de lo que sugiere la sintaxis, las declaraciones "tienen un valor" y, por lo tanto, son expresiones, siempre que estén entre llaves:

 var  status  =  {  if  ( cerrado )  "cerrado"  else  "abierto"  };  var  pass  =  {  try  {  foo  }  catch  {  false  }  else  {  true  }  };

Sentencias concurrentes y flujo de control

En urbiscript, algunas construcciones de flujo de control vienen en varios "tipos": dos tipos de composición secuencial y dos tipos de composición concurrente. En segundo plano, la concurrencia se implementa mediante corrutinas . [5]

Composición de la declaración

Al igual que en C, el punto y coma denota composición secuencial: a;bsignifica "ejecutar sentencia ay luego ejecutar sentencia " b. Se pueden ejecutar otras tareas entre ay b. Otro separador de sentencias, la barra vertical, denota "composición secuencial estricta": no se puede ejecutar ninguna otra tarea entre ay ben a|b.

De manera similar, urbiscript cuenta con dos medios para componer sentencias simultáneamente. Con a,b, primero ase ejecuta y en algún momento bse ejecutará --- posiblemente mientras aaún se esté ejecutando. Esto es muy similar al &operador en los shells de Unix. Alternativamente, con a&b, tanto ay bse inician juntos; en sesiones interactivas, esto significa que ano se ejecutará hasta que bse ingrese por completo y esté seguido correctamente por a ;o a ,.

Los alcances son límites para los trabajos en segundo plano, como se demuestra en el siguiente ejemplo: [5]

 {  {  dormir ( 2s );  eco ( 2 )  },  {  dormir ( 1s );  eco ( 1 )  },  };  eco ( 3 );
[00012451] *** 1
[00013447] *** 2
[00013447] *** 3

Sabores concurrentes de construcciones secuenciales

La mayoría de las construcciones de bucle en urbiscript vienen en varios "tipos", que se basan en los cuatro separadores de declaraciones: ;, |, ,, y &.

Por ejemplo

 // Esto en realidad es "para;".  for  ( var  i  :  [ 0 ,  1 ,  2 ])  {  echo ( i );  echo ( i  **  2 );  };

muestra

[00002919] *** 0
[00002921] *** 0
[00002921] *** 1
[00002922] *** 1
[00002922] *** 2
[00002922] *** 4

es decir, los cuerpos del bucle no se ejecutan secuencialmente, mientras que la for&palabra clave ejecuta los cuerpos del bucle simultáneamente:

 para&  ( var  i  :  [ 0 ,  1 ,  2 ])  {  eco ( i );  eco ( i  **  2 );  };
[00021680] *** 0
[00021680] *** 1
[00021680] *** 2
[00021682] *** 0
[00021682] *** 1
[00021682] *** 4

Programación basada en eventos

Con el objetivo de desarrollar aplicaciones robóticas portátiles, [6] urbiscript se basa en construcciones sintácticas específicas para especificar comportamientos reactivos como "ir a la base de carga cuando la batería está baja", "reproducir un sonido amigable cuando se reconoce una cara conocida" o "detenerse cuando se detecta un obstáculo".

Manejo explícito de eventos

El manejo de eventos consta de tres pasos. Primero, definir un evento

 var  e  =  Evento . nuevo ;

En segundo lugar, especifique los controladores de eventos.

 en  ( e ?)  echo ( "evento recibido e" );

En tercer lugar, "emitir" este evento

 mi !;
[00014333] *** evento recibido e

Los eventos pueden tener cargas útiles, y los controladores de eventos disfrutan de la coincidencia de patrones en la carga útil:

 en  ( e ?( 1 ,  var  x )  si  x  %  2  ==  0 )  echo ( "evento recibido e(1, %s)"  %  x );  e !( 1 ,  1 );
[00014336] *** evento recibido e
 y !( 1 ,  2 );
[00014336] *** evento recibido e
[00014336] *** evento recibido e(1, 2)

Eventos implícitos

El lenguaje urbiscript también permite monitorizar expresiones:

 en  ( batteryLevel  <  = 0.2 )  robot.goToChargingDock ;

El siguiente ejemplo demuestra la característica:

 var  x  =  0 ;
[00002165] 0
 var  y  =  0 ;
[00002166] 0
 var  z  =  0 ;
[00002167] 0
 en  ( 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

Véase también

Referencias

  1. ^ "Urbi, el sistema operativo de código abierto para robots" . Consultado el 27 de octubre de 2012 .
  2. ^ abcd Baillie, Jean-Christophe; Demaille, Akim; Nota, Matthieu; Hocquet, Quintín; Tardieu, Samuel (2008). «La Plataforma Universal de Robótica Urbi» (PDF) . Consultado el 6 de octubre de 2011 .
  3. ^ Baillie, Jean-Christophe. "Urbi: un nuevo lenguaje de programación paralelo y controlado por eventos para robótica, juegos y más". YouTube . Consultado el 6 de octubre de 2011 .
  4. ^ "Manual de referencia del lenguaje urbiscript" . Consultado el 20 de septiembre de 2011 .
  5. ^ ab Baillie, Jean-Christophe; Demaille, Akim; Nota, Matthieu; Hocquet, Quentin (2010). «Etiqueta: Control de Trabajos en Urbiscript» (PDF) . Consultado el 6 de octubre de 2011 .
  6. ^ Baillie, Jean-Christophe; Demaille, Akim; Nottale, Matthieu; Hocquet, Quentin (2010). «¡Acontecimientos! (Reactividad en urbiscript)». arXiv : 1010.5694 [cs.PL].

Enlaces externos