Differences
This shows you the differences between two versions of the page.
| Both sides previous revisionPrevious revisionNext revision | Previous revision | ||
| language:impl [2022/04/11 15:16] – rajit | language:impl [2023/04/09 22:06] (current) – [Overrides] rajit | ||
|---|---|---|---|
| Line 59: | Line 59: | ||
| port list. As an illustration, | port list. As an illustration, | ||
| - | < | + | < |
| defproc type1 (bool a, b) { ... } | defproc type1 (bool a, b) { ... } | ||
| defproc type2 <: type1 (bool c) { ... } | defproc type2 <: type1 (bool c) { ... } | ||
| Line 72: | Line 72: | ||
| the port list example above. | the port list example above. | ||
| - | < | + | < |
| template< | template< | ||
| defproc type1 (bool a, b) { ... } | defproc type1 (bool a, b) { ... } | ||
| Line 82: | Line 82: | ||
| However, we can also define '' | However, we can also define '' | ||
| - | < | + | < |
| template< | template< | ||
| defproc type1 (bool a, b) { ... } | defproc type1 (bool a, b) { ... } | ||
| Line 103: | Line 103: | ||
| as follows: | as follows: | ||
| - | < | + | < |
| type2< | type2< | ||
| // x.N, x.M are both accessible! | // x.N, x.M are both accessible! | ||
| Line 113: | Line 113: | ||
| the instance | the instance | ||
| - | < | + | < |
| type2< | type2< | ||
| // x.M=5, x.N=7 | // x.M=5, x.N=7 | ||
| Line 122: | Line 122: | ||
| the following would be an error: | the following would be an error: | ||
| - | < | + | < |
| template< | template< | ||
| template< | template< | ||
| + | </ | ||
| + | < | ||
| -[ERROR]-> | -[ERROR]-> | ||
| | | ||
| Line 134: | Line 136: | ||
| consider the following example: | consider the following example: | ||
| - | < | + | < |
| defproc buffer (e1of2? l, e1of2! r) | defproc buffer (e1of2? l, e1of2! r) | ||
| { | { | ||
| Line 149: | Line 151: | ||
| define a specific implementation as follows: | define a specific implementation as follows: | ||
| - | < | + | < |
| defproc wchb <: buffer () | defproc wchb <: buffer () | ||
| { | { | ||
| Line 167: | Line 169: | ||
| specification for a buffer at the CHP level of abstraction would be: | specification for a buffer at the CHP level of abstraction would be: | ||
| - | < | + | < |
| defproc buffer (chan? | defproc buffer (chan? | ||
| { | { | ||
| Line 191: | Line 193: | ||
| implementation of the original. The syntax for this is shown below: | implementation of the original. The syntax for this is shown below: | ||
| - | < | + | < |
| defproc wchb <: buffer() | defproc wchb <: buffer() | ||
| +{ e1of2 l, r; } // override block | +{ e1of2 l, r; } // override block | ||
| Line 210: | Line 212: | ||
| only syntax permited is of the form within an override block is | only syntax permited is of the form within an override block is | ||
| - | < | + | < |
| +{ | +{ | ||
| type list-of-ids; | type list-of-ids; | ||
| Line 243: | Line 245: | ||
| representation of the Boolean variable. | representation of the Boolean variable. | ||
| + | === Overriding conditional instances and templated types === | ||
| + | An instance created in a type definition may be created only under certain circumstances. | ||
| + | This can occur in templated types, where template parameters can affect the instances within the type. | ||
| + | The override block has the simple syntax shown above. However, to account for conditional instances, | ||
| + | the override block directives implicitly check if the instance exists before applying the override. (Note that | ||
| + | ACT does not permit different types for the same instance name under different conditions.) | ||
| + | When a type is being overridden by another, the new implementation may have additional template parameters. | ||
| + | The override syntax above requires the complete list of template parameters to be specified. Instead, we also | ||
| + | provide a single extension override syntax | ||
| - | + | <code act> | |
| - | + | +{ | |
| + | | ||
| + | ... | ||
| + | } | ||
| + | </ | ||
| + | The '' | ||