Verum Dezyne 2.17 Release

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 runlps2ts’ 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.