Next: Cannot bind wildcard to requires port, Previous: Cannot bind two wildcards, Up: Well-formedness – System [Contents][Index]
instance in in a cyclic bindingWe can define communication “direction” for bindings as follows:
requires port directs to
the provides port in the binding.
provides external port directs to
a component instance provides port, and a component instance
requires directs to a requires external port.
To prevent component re-entrancy and guarantee run-to-completion semantics, cycles in ’directed’ communication are not allowed within a system component.
In the most trivial example, which creates a one-component cycle:
interface ihello
{
in void hello ();
behavior {on hello:{}}
}
component hello
{
provides ihello p;
requires ihello r;
behavior {}
}
component binding_cycle
{
system
{
hello h;
h.p <=> h.r;
}
}
This results in the following error messages:
binding-cycle.dzn:18:5: error: instance `h' is in a cyclic binding
A more elaborate example creates a cycle over three components:
interface ihello
{
in void hello ();
behavior {on hello:{}}
}
component hello
{
provides ihello p;
requires ihello r;
behavior {}
}
component world
{
provides ihello p_left;
provides ihello p_right;
requires ihello r_left;
requires ihello r_right;
behavior {}
}
component binding_cycle
{
provides ihello p_left;
provides ihello p_right;
requires ihello r_left;
requires ihello r_right;
system
{
hello h1;
hello h2;
world w1;
world w2;
p_left <=> w1.p_left;
p_right <=> w2.p_left;
w1.r_left <=> h1.p;
w1.r_right <=> h2.p;
w2.r_left <=> w1.p_right;
w2.r_right <=> r_right;
h1.r <=> r_left;
h2.r <=> w2.p_right;
}
}
This results in the following error message:
binding-cycle-elaborate.dzn:32:5: error: instance `h2' is in a cyclic
binding
binding-cycle-elaborate.dzn:33:5: error: instance `w1' is in a cyclic
binding
binding-cycle-elaborate.dzn:34:5: error: instance `w2' is in a cyclic
binding
Next: Cannot bind wildcard to requires port, Previous: Cannot bind two wildcards, Up: Well-formedness – System [Contents][Index]