Exécuter des commandes en parallèle

Une commande URBI peut durer un certain temps. C'est une nouveauté parmi la plupart des autres langages. Nous avons vu précédemment que l'on peut affecter des valeurs avec une certaine durée, une certaine vitesse, voire même avec une évolution sinusoïdale sans fin. Il existe de nombreuses façons de faire fonctionner ces commandes en parallèle. Nous avons déjà vu comment le faire en utilisant une virgule pour séparer les commandes au lieu d'un point-virgule.

Il y a une autre manière pour indiquer que les commandes doivent s'exécuter en parallèle: utiliser & :

x=4 time:1s & y=2 speed:0.1;

La différence avec le séparateur virgule est qu'ici on force les deux commandes à démarrer exactement au même moment. En particulier, cela signifie que la première commande ne peut démarrer tant que la seconde n'est pas complètement disponible. Ainsi, taper x=4 time:1s & dans la console ne produira rien car URBI attendra alors de savoir ce qui suit, après le & (c'est la raison pour laquelle le séparateur virgule existe, car ce dernier est moins contraignant et permet de lancer les commandes intéractivement).

Dans la même idée, les commandes peuvent être lancées en série, exactement l'une après l'autre, en utilisant un séparateur | (appelé pipe, tuyau en anglais):

x=4 time:1s | y=2 speed:0.1;

Il n'y aura aucun temps mort entre les deux commandes donc, là encore, URBI attend que la seconde commande soit disponible: la seconde commande doit démarrer exactement après la première, par conséquent elle doit être lue en avance.

Utiliser le point-virgule ou la virgule est plus permissif car ces deux séparateurs démarrent immédiatement la commande se trouvant juste avant eux. Mais si votre projet réclame des contraintes temporelles fortes, les séparateurs & et | sont là pour vous aider.

Il est possible de regrouper plusieurs commandes en les encadrant avec des accolades et ainsi élaborer des structures temporelles complexes:

{ { x=4 time:1s | y=2 speed:0.1 } & z=0 sin:200ms ampli:4 } | t=2,

Conseil: En général, pensez à terminer les commandes entrées dans une console (URBILab ou telnet) par une virgule, pour éviter de bloquer la connexion après avoir saisi une commande sans fin.