# Verum Dezyne 2.17 Release

**URL:** <https://forum.verum.com/t/verum-dezyne-2-17-release/100>\
**Category:** Announcements\
**Created:** [January 23, 2023, 3:37pm UTC](https://forum.verum.com/t/verum-dezyne-2-17-release/100 "2023-01-23T15:37:46Z")\
**Posts on this page:** 1\
**Page:** 1

<div class="post-metadata">

**Author:** ![Bird](https://dub1.discourse-cdn.com/flex017/user_avatar/forum.verum.com/bird/32/18_2.png) [@Bird](https://forum.verum.com/u/Bird)\
**Post date:** [January 23, 2023, 3:37pm UTC](https://forum.verum.com/t/verum-dezyne-2-17-release/100/1 "2023-01-23T15:37:46Z")

</div>

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](https://dezyne.org/documentation.html)

### 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.
