Choreographies are a way of describing communicating systems as global programs
let x@A = crunch()
let y@B = crunch()
A[x] -> B.x
B[y] -> A.y
let x@A = crunch()
let y@B = crunch()
A[x] -> B.x
B[y] -> A.y
A
x = crunch()
let x@A = crunch()
let y@B = crunch()
A[x] -> B.x
B[y] -> A.y
A
x = crunch()
B
y = crunch()
let x@A = crunch()
let y@B = crunch()
A[x] -> B.x
B[y] -> A.y
A
x = crunch()
send("A",x)
B
y = crunch()
x = receive("A")
let x@A = crunch()
let y@B = crunch()
A[x] -> B.x
B[y] -> A.y
A
x = crunch()
send("B",x)
y = receive("B")
B
y = crunch()
x = receive("A")
send("A",y)
Features
A[x] -> B.x
B[y] -> A.y
A[x] -> B.x
B[y] -> A.y
A[x] -> B.x
B[y] -> A.y