jean-christophe baillieakim demaillequentin hocquet ... · concurrency flow control from sequential...

59
Tag: Job Control in urbiscript Jean-Christophe Baillie Akim Demaille Quentin Hocquet Matthieu Nottale Gostai S.A.S. Control Architectures of Robots 2010 May 18th, 2010

Upload: others

Post on 21-May-2020

8 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Jean-Christophe BaillieAkim DemailleQuentin Hocquet ... · Concurrency Flow Control From Sequential to Concurrent sequentiality a;b tight sequentiality ajb background concurrency

Tag: Job Control in urbiscript

Jean-Christophe Baillie Akim Demaille Quentin HocquetMatthieu Nottale

Gostai S.A.S.

Control Architectures of Robots 2010May 18th, 2010

Page 2: Jean-Christophe BaillieAkim DemailleQuentin Hocquet ... · Concurrency Flow Control From Sequential to Concurrent sequentiality a;b tight sequentiality ajb background concurrency

Tag: Job Control in urbiscript

1 ConcurrencyFlow ControlEvents

2 TagsJobsEventsMisc

J.-C. Baillie et al. (Gostai) Tag: Job Control in urbiscript CAR’10 2 / 33

Page 3: Jean-Christophe BaillieAkim DemailleQuentin Hocquet ... · Concurrency Flow Control From Sequential to Concurrent sequentiality a;b tight sequentiality ajb background concurrency

J.-C. Baillie et al. (Gostai) Tag: Job Control in urbiscript CAR’10 3 / 33

Page 4: Jean-Christophe BaillieAkim DemailleQuentin Hocquet ... · Concurrency Flow Control From Sequential to Concurrent sequentiality a;b tight sequentiality ajb background concurrency

J.-C. Baillie et al. (Gostai) Tag: Job Control in urbiscript CAR’10 4 / 33

Page 5: Jean-Christophe BaillieAkim DemailleQuentin Hocquet ... · Concurrency Flow Control From Sequential to Concurrent sequentiality a;b tight sequentiality ajb background concurrency

Architecture

Windows Mac OS X

Linux

RT OS Xenomai

Hardware

UObject

(Ex. : motors, camera)C++

RTC Component

(Ex. : motors, camera)C++

urbiscript

RTC Interface Urbi

ApplicationsEx. : Gostai Lab,

remote surveillance...

Remote ComponentEx. : algorithms, applications...

liburbiJava

liburbiC++

UObjectC++

liburbiMatlab

RAW TCP socket through simple protocol

code

Gostai RTCRuntime

N E T W O R K

J.-C. Baillie et al. (Gostai) Tag: Job Control in urbiscript CAR’10 5 / 33

Page 6: Jean-Christophe BaillieAkim DemailleQuentin Hocquet ... · Concurrency Flow Control From Sequential to Concurrent sequentiality a;b tight sequentiality ajb background concurrency

Architecture

Windows Mac OS X

Linux

RT OS Xenomai

Hardware

UObject

(Ex. : motors, camera)C++

RTC Component

(Ex. : motors, camera)C++

urbiscript

RTC Interface Urbi

ApplicationsEx. : Gostai Lab,

remote surveillance...

Remote ComponentEx. : algorithms, applications...

liburbiJava

liburbiC++

UObjectC++

liburbiMatlab

RAW TCP socket through simple protocol

code

Gostai RTCRuntime

N E T W O R K

J.-C. Baillie et al. (Gostai) Tag: Job Control in urbiscript CAR’10 5 / 33

Page 7: Jean-Christophe BaillieAkim DemailleQuentin Hocquet ... · Concurrency Flow Control From Sequential to Concurrent sequentiality a;b tight sequentiality ajb background concurrency

Architecture

Windows Mac OS X

Linux

RT OS Xenomai

Hardware

UObject

(Ex. : motors, camera)C++

RTC Component

(Ex. : motors, camera)C++

urbiscript

RTC Interface Urbi

ApplicationsEx. : Gostai Lab,

remote surveillance...

Remote ComponentEx. : algorithms, applications...

liburbiJava

liburbiC++

UObjectC++

liburbiMatlab

RAW TCP socket through simple protocol

code

Gostai RTCRuntime

N E T W O R K

J.-C. Baillie et al. (Gostai) Tag: Job Control in urbiscript CAR’10 5 / 33

Page 8: Jean-Christophe BaillieAkim DemailleQuentin Hocquet ... · Concurrency Flow Control From Sequential to Concurrent sequentiality a;b tight sequentiality ajb background concurrency

Architecture

Windows Mac OS X

Linux

RT OS Xenomai

Hardware

UObject

(Ex. : motors, camera)C++

RTC Component

(Ex. : motors, camera)C++

urbiscript

RTC Interface Urbi

ApplicationsEx. : Gostai Lab,

remote surveillance...

Remote ComponentEx. : algorithms, applications...

liburbiJava

liburbiC++

UObjectC++

liburbiMatlab

RAW TCP socket through simple protocol

code

Gostai RTCRuntime

N E T W O R KJ.-C. Baillie et al. (Gostai) Tag: Job Control in urbiscript CAR’10 5 / 33

Page 9: Jean-Christophe BaillieAkim DemailleQuentin Hocquet ... · Concurrency Flow Control From Sequential to Concurrent sequentiality a;b tight sequentiality ajb background concurrency

Architecture

Windows Mac OS X

Linux

RT OS Xenomai

Hardware

UObject

(Ex. : motors, camera)C++

RTC Component

(Ex. : motors, camera)C++

urbiscript

RTC Interface Urbi

ApplicationsEx. : Gostai Lab,

remote surveillance...

Remote ComponentEx. : algorithms, applications...

liburbiJava

liburbiC++

UObjectC++

liburbiMatlab

RAW TCP socket through simple protocol

code

Gostai RTCRuntime

N E T W O R KJ.-C. Baillie et al. (Gostai) Tag: Job Control in urbiscript CAR’10 5 / 33

Page 10: Jean-Christophe BaillieAkim DemailleQuentin Hocquet ... · Concurrency Flow Control From Sequential to Concurrent sequentiality a;b tight sequentiality ajb background concurrency

Architecture

Windows Mac OS X

Linux

RT OS Xenomai

Hardware

UObject

(Ex. : motors, camera)C++

RTC Component

(Ex. : motors, camera)C++

urbiscript

RTC Interface Urbi

ApplicationsEx. : Gostai Lab,

remote surveillance...

Remote ComponentEx. : algorithms, applications...

liburbiJava

liburbiC++

UObjectC++

liburbiMatlab

RAW TCP socket through simple protocol

code

Gostai RTCRuntime

N E T W O R K

J.-C. Baillie et al. (Gostai) Tag: Job Control in urbiscript CAR’10 6 / 33

Page 11: Jean-Christophe BaillieAkim DemailleQuentin Hocquet ... · Concurrency Flow Control From Sequential to Concurrent sequentiality a;b tight sequentiality ajb background concurrency

Concurrency

Concurrency

1 ConcurrencyFlow ControlEvents

2 Tags

J.-C. Baillie et al. (Gostai) Tag: Job Control in urbiscript CAR’10 7 / 33

Page 12: Jean-Christophe BaillieAkim DemailleQuentin Hocquet ... · Concurrency Flow Control From Sequential to Concurrent sequentiality a;b tight sequentiality ajb background concurrency

Concurrency Flow Control

Flow Control

1 ConcurrencyFlow ControlEvents

2 Tags

J.-C. Baillie et al. (Gostai) Tag: Job Control in urbiscript CAR’10 8 / 33

Page 13: Jean-Christophe BaillieAkim DemailleQuentin Hocquet ... · Concurrency Flow Control From Sequential to Concurrent sequentiality a;b tight sequentiality ajb background concurrency

Concurrency Flow Control

From Sequential to Concurrent

sequentiality

a;btight sequentiality

a|b

background concurrency

a,bfair-start concurrency

a&b

J.-C. Baillie et al. (Gostai) Tag: Job Control in urbiscript CAR’10 9 / 33

Page 14: Jean-Christophe BaillieAkim DemailleQuentin Hocquet ... · Concurrency Flow Control From Sequential to Concurrent sequentiality a;b tight sequentiality ajb background concurrency

Concurrency Flow Control

From Sequential to Concurrent

sequentiality

a;btight sequentiality

a|b

background concurrency

a,bfair-start concurrency

a&b

J.-C. Baillie et al. (Gostai) Tag: Job Control in urbiscript CAR’10 9 / 33

Page 15: Jean-Christophe BaillieAkim DemailleQuentin Hocquet ... · Concurrency Flow Control From Sequential to Concurrent sequentiality a;b tight sequentiality ajb background concurrency

Concurrency Flow Control

From Sequential to Concurrent

sequentiality

a;btight sequentiality

a|b

background concurrency

a,bfair-start concurrency

a&b

J.-C. Baillie et al. (Gostai) Tag: Job Control in urbiscript CAR’10 9 / 33

Page 16: Jean-Christophe BaillieAkim DemailleQuentin Hocquet ... · Concurrency Flow Control From Sequential to Concurrent sequentiality a;b tight sequentiality ajb background concurrency

Concurrency Flow Control

From Sequential to Concurrent

sequentiality

a;btight sequentiality

a|b

background concurrency

a,bfair-start concurrency

a&b

J.-C. Baillie et al. (Gostai) Tag: Job Control in urbiscript CAR’10 9 / 33

Page 17: Jean-Christophe BaillieAkim DemailleQuentin Hocquet ... · Concurrency Flow Control From Sequential to Concurrent sequentiality a;b tight sequentiality ajb background concurrency

Concurrency Flow Control

Backgrounding Commands

for (3){

sleep(1s);

echo("ping");},

sleep(0.5s);

for (3){

sleep(1s);

echo("pong");},

sleep(4s);

[00000316] *** ping

[00000316] *** pong

[00000316] *** ping

[00000316] *** pong

[00000316] *** ping

[00000316] *** pong

J.-C. Baillie et al. (Gostai) Tag: Job Control in urbiscript CAR’10 10 / 33

Page 18: Jean-Christophe BaillieAkim DemailleQuentin Hocquet ... · Concurrency Flow Control From Sequential to Concurrent sequentiality a;b tight sequentiality ajb background concurrency

Concurrency Flow Control

Backgrounding Commands

for (3){

sleep(1s);

echo("ping");},

sleep(0.5s);

for (3){

sleep(1s);

echo("pong");},

sleep(4s);

[00000316] *** ping

[00000316] *** pong

[00000316] *** ping

[00000316] *** pong

[00000316] *** ping

[00000316] *** pong

J.-C. Baillie et al. (Gostai) Tag: Job Control in urbiscript CAR’10 10 / 33

Page 19: Jean-Christophe BaillieAkim DemailleQuentin Hocquet ... · Concurrency Flow Control From Sequential to Concurrent sequentiality a;b tight sequentiality ajb background concurrency

Concurrency Flow Control

Concurrent Flavors of Flow Control Constructs

for (var i : 3.seq.reverse){

echo("%s: start" % i);sleep(i);

echo("%s: done" % i)};

echo("done");[00125189] *** 2: start

[00127190] *** 2: done

[00127190] *** 1: start

[00128192] *** 1: done

[00128192] *** 0: start

[00128193] *** 0: done

[00128194] *** done

for& (var i : 3.seq.reverse){

echo("%s: start" % i);sleep(i);

echo("%s: done" % i)};

echo("done");[00105789] *** 2: start

[00105789] *** 1: start

[00105789] *** 0: start

[00105793] *** 0: done

[00106793] *** 1: done

[00107793] *** 2: done

[00107795] *** done

J.-C. Baillie et al. (Gostai) Tag: Job Control in urbiscript CAR’10 11 / 33

Page 20: Jean-Christophe BaillieAkim DemailleQuentin Hocquet ... · Concurrency Flow Control From Sequential to Concurrent sequentiality a;b tight sequentiality ajb background concurrency

Concurrency Flow Control

Concurrent Flavors of Flow Control Constructs

for (var i : 3.seq.reverse){

echo("%s: start" % i);sleep(i);

echo("%s: done" % i)};

echo("done");[00125189] *** 2: start

[00127190] *** 2: done

[00127190] *** 1: start

[00128192] *** 1: done

[00128192] *** 0: start

[00128193] *** 0: done

[00128194] *** done

for& (var i : 3.seq.reverse){

echo("%s: start" % i);sleep(i);

echo("%s: done" % i)};

echo("done");[00105789] *** 2: start

[00105789] *** 1: start

[00105789] *** 0: start

[00105793] *** 0: done

[00106793] *** 1: done

[00107793] *** 2: done

[00107795] *** done

J.-C. Baillie et al. (Gostai) Tag: Job Control in urbiscript CAR’10 11 / 33

Page 21: Jean-Christophe BaillieAkim DemailleQuentin Hocquet ... · Concurrency Flow Control From Sequential to Concurrent sequentiality a;b tight sequentiality ajb background concurrency

Concurrency Flow Control

Factorial

function echoFact (var n){

var res = 1;for (var i = 2; i <= n; i++)res *= i;

echo("%2d! = %7d" % [n, res]);}|;

echoFact(9);

[00003434] *** 9! = 362880

echoFact(10);

[00003434] *** 10! = 3628800

for& (var i : 10.seq.reverse)echoFact(i);

[00018878] *** 1! = 1

[00018878] *** 0! = 1

[00018879] *** 2! = 2

[00018879] *** 3! = 6

[00018879] *** 4! = 24

[00018880] *** 5! = 120

[00018880] *** 6! = 720

[00018880] *** 7! = 5040

[00018881] *** 8! = 40320

[00018881] *** 9! = 362880

J.-C. Baillie et al. (Gostai) Tag: Job Control in urbiscript CAR’10 12 / 33

Page 22: Jean-Christophe BaillieAkim DemailleQuentin Hocquet ... · Concurrency Flow Control From Sequential to Concurrent sequentiality a;b tight sequentiality ajb background concurrency

Concurrency Flow Control

Factorial

function echoFact (var n){

var res = 1;for (var i = 2; i <= n; i++)res *= i;

echo("%2d! = %7d" % [n, res]);}|;

echoFact(9);

[00003434] *** 9! = 362880

echoFact(10);

[00003434] *** 10! = 3628800

for& (var i : 10.seq.reverse)echoFact(i);

[00018878] *** 1! = 1

[00018878] *** 0! = 1

[00018879] *** 2! = 2

[00018879] *** 3! = 6

[00018879] *** 4! = 24

[00018880] *** 5! = 120

[00018880] *** 6! = 720

[00018880] *** 7! = 5040

[00018881] *** 8! = 40320

[00018881] *** 9! = 362880

J.-C. Baillie et al. (Gostai) Tag: Job Control in urbiscript CAR’10 12 / 33

Page 23: Jean-Christophe BaillieAkim DemailleQuentin Hocquet ... · Concurrency Flow Control From Sequential to Concurrent sequentiality a;b tight sequentiality ajb background concurrency

Concurrency Flow Control

Factorial

echoFact = function (var n){

var res = 1;for (var i = 2; i <= n; i++)res *= i;

echo("%2d! = %7d" % [n, res])}|;

for& (var i : 4.seq.reverse)echoFact(i);

[00018878] *** 1! = 1

[00018878] *** 0! = 1

[00018879] *** 2! = 2

[00018879] *** 3! = 6

echoFact = function (var n){

nonInterruptible;

var res = 1;for (var i = 2; i <= n; i++)res *= i;

echo("%2d! = %7d" % [n, res])}|;

for& (var i : 4.seq.reverse)echoFact(i);

[00000051] *** 3! = 6

[00000052] *** 2! = 2

[00000053] *** 1! = 1

[00000054] *** 0! = 1

J.-C. Baillie et al. (Gostai) Tag: Job Control in urbiscript CAR’10 13 / 33

Page 24: Jean-Christophe BaillieAkim DemailleQuentin Hocquet ... · Concurrency Flow Control From Sequential to Concurrent sequentiality a;b tight sequentiality ajb background concurrency

Concurrency Flow Control

Factorial

echoFact = function (var n){

var res = 1;for (var i = 2; i <= n; i++)res *= i;

echo("%2d! = %7d" % [n, res])}|;

for& (var i : 4.seq.reverse)echoFact(i);

[00018878] *** 1! = 1

[00018878] *** 0! = 1

[00018879] *** 2! = 2

[00018879] *** 3! = 6

echoFact = function (var n){

nonInterruptible;

var res = 1;for (var i = 2; i <= n; i++)res *= i;

echo("%2d! = %7d" % [n, res])}|;

for& (var i : 4.seq.reverse)echoFact(i);

[00000051] *** 3! = 6

[00000052] *** 2! = 2

[00000053] *** 1! = 1

[00000054] *** 0! = 1

J.-C. Baillie et al. (Gostai) Tag: Job Control in urbiscript CAR’10 13 / 33

Page 25: Jean-Christophe BaillieAkim DemailleQuentin Hocquet ... · Concurrency Flow Control From Sequential to Concurrent sequentiality a;b tight sequentiality ajb background concurrency

Concurrency Events

Events

1 ConcurrencyFlow ControlEvents

2 Tags

J.-C. Baillie et al. (Gostai) Tag: Job Control in urbiscript CAR’10 14 / 33

Page 26: Jean-Christophe BaillieAkim DemailleQuentin Hocquet ... · Concurrency Flow Control From Sequential to Concurrent sequentiality a;b tight sequentiality ajb background concurrency

Concurrency Events

Events are Messages

var e = Event.new|;at (e?)echo("ping");

e!;

[00000000] *** ping

e!;

[00000000] *** ping

J.-C. Baillie et al. (Gostai) Tag: Job Control in urbiscript CAR’10 15 / 33

Page 27: Jean-Christophe BaillieAkim DemailleQuentin Hocquet ... · Concurrency Flow Control From Sequential to Concurrent sequentiality a;b tight sequentiality ajb background concurrency

Concurrency Events

Events carry Messages

var e = Event.new|;

at (e?)echo("e");

at (e?(var x))echo("e(x)");

at (e?(1))echo("e(1)");

at (e?(var x) if x % 2)echo("e(odd)");

e!;

[00000845] *** e

e!(0);

[00011902] *** e

[00011902] *** e(x)

e!(1);

[00023327] *** e

[00023327] *** e(x)

[00023327] *** e(1)

[00023327] *** e(odd)

J.-C. Baillie et al. (Gostai) Tag: Job Control in urbiscript CAR’10 16 / 33

Page 28: Jean-Christophe BaillieAkim DemailleQuentin Hocquet ... · Concurrency Flow Control From Sequential to Concurrent sequentiality a;b tight sequentiality ajb background concurrency

Concurrency Events

Events carry Messages

var e = Event.new|;

at (e?)echo("e");

at (e?(var x))echo("e(x)");

at (e?(1))echo("e(1)");

at (e?(var x) if x % 2)echo("e(odd)");

e!;

[00000845] *** e

e!(0);

[00011902] *** e

[00011902] *** e(x)

e!(1);

[00023327] *** e

[00023327] *** e(x)

[00023327] *** e(1)

[00023327] *** e(odd)

J.-C. Baillie et al. (Gostai) Tag: Job Control in urbiscript CAR’10 16 / 33

Page 29: Jean-Christophe BaillieAkim DemailleQuentin Hocquet ... · Concurrency Flow Control From Sequential to Concurrent sequentiality a;b tight sequentiality ajb background concurrency

Concurrency Events

Assignments are Events

var e = 0|;

at (e)echo("e is true!")

onleaveecho("e is false!");

at (e == 2)echo("e is two!");

at (e % 2 == 0)echo("e is even!");

[00028013] *** e is even!

e = 0|;

// A big fat nothing.

e = 1|;

[00023327] *** e is true!

e = 2|; // Still true.[00028013] *** e is two!

[00028013] *** e is even!

e = 0|; // Still even.[00126958] *** e is false!

e = 2|; // Still even.[00137252] *** e is true!

[00137252] *** e is two!

J.-C. Baillie et al. (Gostai) Tag: Job Control in urbiscript CAR’10 17 / 33

Page 30: Jean-Christophe BaillieAkim DemailleQuentin Hocquet ... · Concurrency Flow Control From Sequential to Concurrent sequentiality a;b tight sequentiality ajb background concurrency

Concurrency Events

Assignments are Events

var e = 0|;

at (e)echo("e is true!")

onleaveecho("e is false!");

at (e == 2)echo("e is two!");

at (e % 2 == 0)echo("e is even!");

[00028013] *** e is even!

e = 0|;

// A big fat nothing.

e = 1|;

[00023327] *** e is true!

e = 2|; // Still true.[00028013] *** e is two!

[00028013] *** e is even!

e = 0|; // Still even.[00126958] *** e is false!

e = 2|; // Still even.[00137252] *** e is true!

[00137252] *** e is two!

J.-C. Baillie et al. (Gostai) Tag: Job Control in urbiscript CAR’10 17 / 33

Page 31: Jean-Christophe BaillieAkim DemailleQuentin Hocquet ... · Concurrency Flow Control From Sequential to Concurrent sequentiality a;b tight sequentiality ajb background concurrency

Tags

Tags

1 Concurrency

2 TagsJobsEventsMisc

J.-C. Baillie et al. (Gostai) Tag: Job Control in urbiscript CAR’10 18 / 33

Page 32: Jean-Christophe BaillieAkim DemailleQuentin Hocquet ... · Concurrency Flow Control From Sequential to Concurrent sequentiality a;b tight sequentiality ajb background concurrency

Tags

Managing Concurrent Executions

Backgrounded code might need to bekilledpausedresumedmore generally, managed

Tags

J.-C. Baillie et al. (Gostai) Tag: Job Control in urbiscript CAR’10 19 / 33

Page 33: Jean-Christophe BaillieAkim DemailleQuentin Hocquet ... · Concurrency Flow Control From Sequential to Concurrent sequentiality a;b tight sequentiality ajb background concurrency

Tags

Managing Concurrent Executions

Backgrounded code might need to bekilledpausedresumedmore generally, managed

Tags

J.-C. Baillie et al. (Gostai) Tag: Job Control in urbiscript CAR’10 19 / 33

Page 34: Jean-Christophe BaillieAkim DemailleQuentin Hocquet ... · Concurrency Flow Control From Sequential to Concurrent sequentiality a;b tight sequentiality ajb background concurrency

Tags

Managing Concurrent Executions

Backgrounded code might need to bekilledpausedresumedmore generally, managed

Tags

J.-C. Baillie et al. (Gostai) Tag: Job Control in urbiscript CAR’10 19 / 33

Page 35: Jean-Christophe BaillieAkim DemailleQuentin Hocquet ... · Concurrency Flow Control From Sequential to Concurrent sequentiality a;b tight sequentiality ajb background concurrency

Tags

Managing Concurrent Executions

Backgrounded code might need to bekilledpausedresumedmore generally, managed

Tags

J.-C. Baillie et al. (Gostai) Tag: Job Control in urbiscript CAR’10 19 / 33

Page 36: Jean-Christophe BaillieAkim DemailleQuentin Hocquet ... · Concurrency Flow Control From Sequential to Concurrent sequentiality a;b tight sequentiality ajb background concurrency

Tags

Managing Concurrent Executions

Backgrounded code might need to bekilledpausedresumedmore generally, managed

Tags

J.-C. Baillie et al. (Gostai) Tag: Job Control in urbiscript CAR’10 19 / 33

Page 37: Jean-Christophe BaillieAkim DemailleQuentin Hocquet ... · Concurrency Flow Control From Sequential to Concurrent sequentiality a;b tight sequentiality ajb background concurrency

Tags Jobs

Jobs

1 Concurrency

2 TagsJobsEventsMisc

J.-C. Baillie et al. (Gostai) Tag: Job Control in urbiscript CAR’10 20 / 33

Page 38: Jean-Christophe BaillieAkim DemailleQuentin Hocquet ... · Concurrency Flow Control From Sequential to Concurrent sequentiality a;b tight sequentiality ajb background concurrency

Tags Jobs

Stop

var t = Tag.new|;var t0 = time|;t: every(1s) echo("foo"),sleep(2.2s);

[00000158] *** foo

[00001159] *** foo

[00002159] *** foo

t.stop;

// Nothing runs.sleep(2.2s);

t: every(1s) echo("bar"),sleep(2.2s);

[00000158] *** bar

[00001159] *** bar

[00002159] *** bar

t.stop;

J.-C. Baillie et al. (Gostai) Tag: Job Control in urbiscript CAR’10 21 / 33

Page 39: Jean-Christophe BaillieAkim DemailleQuentin Hocquet ... · Concurrency Flow Control From Sequential to Concurrent sequentiality a;b tight sequentiality ajb background concurrency

Tags Jobs

Stop

var t = Tag.new|;var t0 = time|;t: every(1s) echo("foo"),sleep(2.2s);

[00000158] *** foo

[00001159] *** foo

[00002159] *** foo

t.stop;

// Nothing runs.sleep(2.2s);

t: every(1s) echo("bar"),sleep(2.2s);

[00000158] *** bar

[00001159] *** bar

[00002159] *** bar

t.stop;

J.-C. Baillie et al. (Gostai) Tag: Job Control in urbiscript CAR’10 21 / 33

Page 40: Jean-Christophe BaillieAkim DemailleQuentin Hocquet ... · Concurrency Flow Control From Sequential to Concurrent sequentiality a;b tight sequentiality ajb background concurrency

Tags Jobs

Stop with a Value

var t = Tag.new|;var res;detach(res = { t: every(1s) echo("computing") })|;sleep(2.2s);

[00000001] *** computing

[00000002] *** computing

[00000003] *** computing

t.stop("result");assert(res == "result");

J.-C. Baillie et al. (Gostai) Tag: Job Control in urbiscript CAR’10 22 / 33

Page 41: Jean-Christophe BaillieAkim DemailleQuentin Hocquet ... · Concurrency Flow Control From Sequential to Concurrent sequentiality a;b tight sequentiality ajb background concurrency

Tags Jobs

Block

var ping = Tag.new("ping")|;ping:

every (1s)echo("ping"),

assert(!ping.blocked);sleep(2.1s);

[00000000] *** ping

[00002000] *** ping

[00002000] *** ping

ping.block;

assert(ping.blocked);

ping:

every (1s)echo("pong"),

// Neither new nor old code runs.

ping.unblock;

assert(!ping.blocked);sleep(2.1s);

// But we can use the tag again.ping:

every (1s)echo("ping again"),

sleep(2.1s);

[00004000] *** ping again

[00005000] *** ping again

[00006000] *** ping again

J.-C. Baillie et al. (Gostai) Tag: Job Control in urbiscript CAR’10 23 / 33

Page 42: Jean-Christophe BaillieAkim DemailleQuentin Hocquet ... · Concurrency Flow Control From Sequential to Concurrent sequentiality a;b tight sequentiality ajb background concurrency

Tags Jobs

Block

var ping = Tag.new("ping")|;ping:

every (1s)echo("ping"),

assert(!ping.blocked);sleep(2.1s);

[00000000] *** ping

[00002000] *** ping

[00002000] *** ping

ping.block;

assert(ping.blocked);

ping:

every (1s)echo("pong"),

// Neither new nor old code runs.

ping.unblock;

assert(!ping.blocked);sleep(2.1s);

// But we can use the tag again.ping:

every (1s)echo("ping again"),

sleep(2.1s);

[00004000] *** ping again

[00005000] *** ping again

[00006000] *** ping again

J.-C. Baillie et al. (Gostai) Tag: Job Control in urbiscript CAR’10 23 / 33

Page 43: Jean-Christophe BaillieAkim DemailleQuentin Hocquet ... · Concurrency Flow Control From Sequential to Concurrent sequentiality a;b tight sequentiality ajb background concurrency

Tags Events

Events

1 Concurrency

2 TagsJobsEventsMisc

J.-C. Baillie et al. (Gostai) Tag: Job Control in urbiscript CAR’10 24 / 33

Page 44: Jean-Christophe BaillieAkim DemailleQuentin Hocquet ... · Concurrency Flow Control From Sequential to Concurrent sequentiality a;b tight sequentiality ajb background concurrency

Tags Events

Tagging Event Catchers

var e = true|;var t = Tag.new|;

t: at (e)echo("e is true!")

onleaveecho("e is false!");

[00000173] *** e is true!

e = false|;

[00000185] *** e is false!

e = true|;

[00000218] *** e is true!

t.freeze;

e = false|;

e = true|;

t.unfreeze;

e = true|;

e = false|;

[00000967] *** e is false!

J.-C. Baillie et al. (Gostai) Tag: Job Control in urbiscript CAR’10 25 / 33

Page 45: Jean-Christophe BaillieAkim DemailleQuentin Hocquet ... · Concurrency Flow Control From Sequential to Concurrent sequentiality a;b tight sequentiality ajb background concurrency

Tags Events

Tagging Event Catchers

var e = true|;var t = Tag.new|;

t: at (e)echo("e is true!")

onleaveecho("e is false!");

[00000173] *** e is true!

e = false|;

[00000185] *** e is false!

e = true|;

[00000218] *** e is true!

t.freeze;

e = false|;

e = true|;

t.unfreeze;

e = true|;

e = false|;

[00000967] *** e is false!

J.-C. Baillie et al. (Gostai) Tag: Job Control in urbiscript CAR’10 25 / 33

Page 46: Jean-Christophe BaillieAkim DemailleQuentin Hocquet ... · Concurrency Flow Control From Sequential to Concurrent sequentiality a;b tight sequentiality ajb background concurrency

Tags Events

Trajectories

var y = 0;

y = 0 cos:2s ampli:10,

J.-C. Baillie et al. (Gostai) Tag: Job Control in urbiscript CAR’10 26 / 33

Page 47: Jean-Christophe BaillieAkim DemailleQuentin Hocquet ... · Concurrency Flow Control From Sequential to Concurrent sequentiality a;b tight sequentiality ajb background concurrency

Tags Events

Trajectories

var y = 0;

t: y = 0 cos:2s ampli:10,

{

sleep(1.5s);

t.freeze;

sleep(1s);

t.unfreeze;

},

J.-C. Baillie et al. (Gostai) Tag: Job Control in urbiscript CAR’10 27 / 33

Page 48: Jean-Christophe BaillieAkim DemailleQuentin Hocquet ... · Concurrency Flow Control From Sequential to Concurrent sequentiality a;b tight sequentiality ajb background concurrency

Tags Misc

Misc

1 Concurrency

2 TagsJobsEventsMisc

J.-C. Baillie et al. (Gostai) Tag: Job Control in urbiscript CAR’10 28 / 33

Page 49: Jean-Christophe BaillieAkim DemailleQuentin Hocquet ... · Concurrency Flow Control From Sequential to Concurrent sequentiality a;b tight sequentiality ajb background concurrency

Tags Misc

Hierarchical Tags

var demo = Tag.new;demo.addChild("dance");demo.addChild("sing");

function robot.demo(){

demo.dance: { /* dance behavior */ }&

demo.sing: { /* sing behavior */ }};

demo.dance.stop; // Stop dancingdemo.sing.stop; // Stop singing

demo.stop; // Stop both

J.-C. Baillie et al. (Gostai) Tag: Job Control in urbiscript CAR’10 29 / 33

Page 50: Jean-Christophe BaillieAkim DemailleQuentin Hocquet ... · Concurrency Flow Control From Sequential to Concurrent sequentiality a;b tight sequentiality ajb background concurrency

Tags Misc

Hierarchical Tags

var demo = Tag.new;demo.addChild("dance");demo.addChild("sing");

function robot.demo(){

demo.dance: { /* dance behavior */ }&

demo.sing: { /* sing behavior */ }};

demo.dance.stop; // Stop dancingdemo.sing.stop; // Stop singing

demo.stop; // Stop both

J.-C. Baillie et al. (Gostai) Tag: Job Control in urbiscript CAR’10 29 / 33

Page 51: Jean-Christophe BaillieAkim DemailleQuentin Hocquet ... · Concurrency Flow Control From Sequential to Concurrent sequentiality a;b tight sequentiality ajb background concurrency

Tags Misc

Hierarchical Tags

var demo = Tag.new;demo.addChild("dance");demo.addChild("sing");

function robot.demo(){

demo.dance: { /* dance behavior */ }&

demo.sing: { /* sing behavior */ }};

demo.dance.stop; // Stop dancingdemo.sing.stop; // Stop singing

demo.stop; // Stop both

J.-C. Baillie et al. (Gostai) Tag: Job Control in urbiscript CAR’10 29 / 33

Page 52: Jean-Christophe BaillieAkim DemailleQuentin Hocquet ... · Concurrency Flow Control From Sequential to Concurrent sequentiality a;b tight sequentiality ajb background concurrency

Tags Misc

Enter/Leave events

var tag = Tag.new|;at (tag.enter?)echo("pre");

at (tag.leave?)echo("post");

tag: echo("in");[00000000] *** pre

[00000000] *** in

[00000000] *** post

J.-C. Baillie et al. (Gostai) Tag: Job Control in urbiscript CAR’10 30 / 33

Page 53: Jean-Christophe BaillieAkim DemailleQuentin Hocquet ... · Concurrency Flow Control From Sequential to Concurrent sequentiality a;b tight sequentiality ajb background concurrency

Tags Misc

Enter/Leave events

var tag = Tag.new|;at (tag.enter?)echo("pre");

at (tag.leave?)echo("post");

tag: echo("in");[00000000] *** pre

[00000000] *** in

[00000000] *** post

J.-C. Baillie et al. (Gostai) Tag: Job Control in urbiscript CAR’10 30 / 33

Page 54: Jean-Christophe BaillieAkim DemailleQuentin Hocquet ... · Concurrency Flow Control From Sequential to Concurrent sequentiality a;b tight sequentiality ajb background concurrency

Tags Misc

Enter/Leave eventsSafety

function cook() {turnGasOn();

{

if (!recipe)throw Exception.new("ENORCP");

if (alreadyCooked)return false;

doStuff();

};

turnGasOff();

return true;}|;

var withGas = Tag.new|;at (withGas.enter?)turnGasOn();

at (withGas.leave?)turnGasOff();

function cookSafely() {withGas:

{

if (!recipe)throw Exception.new("ENORCP");

if (alreadyCooked)return false;

doStuff();

return true;};

}|;

J.-C. Baillie et al. (Gostai) Tag: Job Control in urbiscript CAR’10 31 / 33

Page 55: Jean-Christophe BaillieAkim DemailleQuentin Hocquet ... · Concurrency Flow Control From Sequential to Concurrent sequentiality a;b tight sequentiality ajb background concurrency

Tags Misc

Enter/Leave eventsSafety

function cook() {turnGasOn();

{

if (!recipe)throw Exception.new("ENORCP");

if (alreadyCooked)return false;

doStuff();

};

turnGasOff();

return true;}|;

var withGas = Tag.new|;at (withGas.enter?)turnGasOn();

at (withGas.leave?)turnGasOff();

function cookSafely() {withGas:

{

if (!recipe)throw Exception.new("ENORCP");

if (alreadyCooked)return false;

doStuff();

return true;};

}|;

J.-C. Baillie et al. (Gostai) Tag: Job Control in urbiscript CAR’10 31 / 33

Page 56: Jean-Christophe BaillieAkim DemailleQuentin Hocquet ... · Concurrency Flow Control From Sequential to Concurrent sequentiality a;b tight sequentiality ajb background concurrency

Tags Misc

Mutual Exclusion

var x;function inc(var who) {var from = x; sleep(500ms); var to = x += 1;echo("%s: %s -> %s" % [who, from, to]);

}|;

timeout (2s) {x = 0;

every (1s) inc("1"),sleep(0.3s);

every (1s) inc("2"),};

[00000658] *** 1: 0 -> 1

[00000967] *** 2: 0 -> 2

[00001658] *** 1: 2 -> 3

[00001966] *** 2: 2 -> 4

timeout (2s) {x = 0;

var m = Mutex.new;every (1s) m: inc("1"),sleep(0.3s);

every (1s) m: inc("2"),};

[00000657] *** 1: 0 -> 1

[00001158] *** 2: 1 -> 2

[00001659] *** 1: 2 -> 3

J.-C. Baillie et al. (Gostai) Tag: Job Control in urbiscript CAR’10 32 / 33

Page 57: Jean-Christophe BaillieAkim DemailleQuentin Hocquet ... · Concurrency Flow Control From Sequential to Concurrent sequentiality a;b tight sequentiality ajb background concurrency

Tags Misc

Mutual Exclusion

var x;function inc(var who) {var from = x; sleep(500ms); var to = x += 1;echo("%s: %s -> %s" % [who, from, to]);

}|;

timeout (2s) {x = 0;

every (1s) inc("1"),sleep(0.3s);

every (1s) inc("2"),};

[00000658] *** 1: 0 -> 1

[00000967] *** 2: 0 -> 2

[00001658] *** 1: 2 -> 3

[00001966] *** 2: 2 -> 4

timeout (2s) {x = 0;

var m = Mutex.new;every (1s) m: inc("1"),sleep(0.3s);

every (1s) m: inc("2"),};

[00000657] *** 1: 0 -> 1

[00001158] *** 2: 1 -> 2

[00001659] *** 1: 2 -> 3

J.-C. Baillie et al. (Gostai) Tag: Job Control in urbiscript CAR’10 32 / 33

Page 58: Jean-Christophe BaillieAkim DemailleQuentin Hocquet ... · Concurrency Flow Control From Sequential to Concurrent sequentiality a;b tight sequentiality ajb background concurrency

Tags Misc

Mutual Exclusion

var x;function inc(var who) {var from = x; sleep(500ms); var to = x += 1;echo("%s: %s -> %s" % [who, from, to]);

}|;

timeout (2s) {x = 0;

every (1s) inc("1"),sleep(0.3s);

every (1s) inc("2"),};

[00000658] *** 1: 0 -> 1

[00000967] *** 2: 0 -> 2

[00001658] *** 1: 2 -> 3

[00001966] *** 2: 2 -> 4

timeout (2s) {x = 0;

var m = Mutex.new;every (1s) m: inc("1"),sleep(0.3s);

every (1s) m: inc("2"),};

[00000657] *** 1: 0 -> 1

[00001158] *** 2: 1 -> 2

[00001659] *** 1: 2 -> 3

J.-C. Baillie et al. (Gostai) Tag: Job Control in urbiscript CAR’10 32 / 33

Page 59: Jean-Christophe BaillieAkim DemailleQuentin Hocquet ... · Concurrency Flow Control From Sequential to Concurrent sequentiality a;b tight sequentiality ajb background concurrency

Outro

Tag: Job Control in urbiscript

1 ConcurrencyFlow ControlEvents

2 TagsJobsEventsMisc

J.-C. Baillie et al. (Gostai) Tag: Job Control in urbiscript CAR’10 33 / 33