``Parallel or'' is a classic idiom of parallel programming. The ``parallel or'' operation executes two
expressions F and G in parallel, each of which may publish a single boolean,
and returns the disjunction of their publications as soon as possible.
If one of the expressions publishes `true`

, then the disjunction is `true`

,
so it is not necessary to wait for the other expression to publish a value.
This holds even if one of the expressions is silent.

The ``parallel or'' of expressions F and G may be expressed in Orc as follows:

val result = val a =Fval b =GIft(a) >> true | Ift(b) >> true | (a || b) result

The expression `(a || b)`

waits for both `a`

and `b`

to become
available and then publishes their disjunction. However if either `a`

or
`b`

is true we can publish `true`

immediately regardless of whether the
other variable is available. Therefore we run `Ift(a) >> true`

and `Ift(b) >> true`

in parallel to wait for either variable to become `true`

and immediately
publish the result `true`

. Since more than one of these expressions may
publish `true`

, the surrounding `val`

is necessary to select and
publish only the first result.