Before 2.17.0, for a component to be compliant with its provides interface(s), implementing a component required meticulously specifying the same behavior in the component as in the provides interface; therefore the code from the interface is often repeated in the component.
Now the provides interface(s) are implicitly applied as a constraint on the component behavior. This means that anything disallowed by the interface, i.e., explicitly or implicitly marked as illegal
, is implicitly marked as illegal
in the component behavior.
Also in this release: An unreachable code check, generalized integer expressions, and a full rewrite of the language lookup mechanism fixing some long standing namespace bugs.
See also the Dezyne documentation
Changes in 2.17.0 since 2.16.3
- Language
- A component’s behavior is now implicitly constrained by the behavior of its provides interfaces.
- Unary minus is now supported in integer expressions.
- Integer expressions have been generalized: It is no longer necessary to split a longer expression or to use parameters.
- Support for `dzn.async’ ports has been removed.
- Parser
- A new transformation has been added: `tag-imperative-blocks’.
- Reduced well-formedness checking overhead by about 50%.
- The behavior of imported components is no longer checked for well-formedness.
- Defining an event in an interface and not using it in its behavior is now reported as a well-formedness error.
- Verification
- The verifier now checks for unreachable code.
- As a result of the unreachable code check, two identical on statements are now reported as having an overlapping guard.
- The verifier has a new option `-C,–no-constraint’ to disable the constraining fo a component’s behavior.
- The verifier has a new option ‘-D,–non-non-compliance’ to report a deadlock error instead of a non-compliance error.
- The verifier has a new option `-U,–no-unreachable’ to disable the unreachable code check.
- The verifier has a new option
--jitty' to run
lps2ts’ using `–rewriter=jittyc’ for large models.
- Code
- The performance of the code generators has been improved by skipping normalization of imported interfaces and components.
- The generated C++ and its runtime now uses typed pointers instead of void pointers for component instances.
- The C++ code generator now uses C++11 style enums, instead of struct scoped C style enums.
- The return type of the enum to_string function has been changed from std::string to char const*.
- The enum stream operator << has been templatized to allow overloading for character type and traits.
- The C++ code generator no longer generates redundant enum string conversion functions.
- The C++ code generator now places the foreign skeleton constructor into its own compilation unit. This assures compilation with non-redundantly generated new style enums regardless of import ordering.
- Noteworthy bug fixes
- Some longstanding bugs have been fixed in relation to
- Extending nested namespaces in imports,
- Referencing partially named identifiers, by a full rewrite of the lookup algorithm.
- The C++ code generator now supports imported foreign components.
- The C# code generator now supports foreign components returning a enum that is defined in an interface.
- The experimental C code generator no longer generates duplicate enum string conversion functions.
- The experimental C code generator now supports a foreign component at the top of a system.
- The well-formedness check no longer crashes on a binary expression with a data constant.
- Some longstanding bugs have been fixed in relation to