Previous Contents Next

3.7   Join-patterns

join-pattern ::= pattern   { | pattern }
pattern ::= name (   [ name   { , name } ] )

Join-patterns are first used to define fresh port names. The simple pattern a (  x 1,... ,  x n) is a definition for a channel a of arity n. Sending n values v 1 , ..., v n on a results in the firing of a ``guarded'' process, with the variables x 1 , ..., x n bound to v 1 , ..., v n. The variables x 1 , ..., x n are much like formal parameters and their scope restricts to the guarded process. If a is a synchronous name, then an implicit continuation argument is created, which follows the same scope restrictions as other arguments.

Join-patterns also are templates that are the basic synchronization construct in the join-calculus. A join-pattern of the kind a 1 (   x 1 , ... ,   x m ) | ... |   a n (   y 1 , ... ,   y l ) defines the port names a 1, ...a n. It also expresses a synchronization between these names. When concurrent invocations on the port names a 1, ...a n are present, the join-pattern is enabled and some action is to be taken. The action is to fire a process that is guarded by the pattern. At that time, the formal parameters x 1 ,..., x m, ..., y 1 , ..., y l, are bound to the actual values given as arguments to the names a 1, ..., a n.

Patterns are linear: a variable cannot appear several times in a given pattern. This applies both to port names and formal arguments. At the moment, there are no anonymous formal parameters: formal arguments must all be variables.

Previous Contents Next