-*- mode: org; coding: utf-8; -*-

#+TITLE: Tentative Dezyne Road Map

Copyright © 2019, 2020 Johri van Eerd <vaneerd.johri@gmail.com>
Copyright © 2020, 2021, 2022, 2024, 2025, 2026 Janneke Nieuwenhuizen <janneke@gnu.org>
Copyright © 2022 Rutger van Beusekom <rutger@dezyne.org>

  Copying and distribution of this file, with or without modification,
  are permitted in any medium without royalty provided the copyright
  notice and this notice are preserved.

The goals of the Dezyne project are two-fold:

  - to create a programming language that allows true code re-use; truly
    deliver the promises made by Object Orientated Programming.

  - to relieve the programmer from inhumane tasks that should be
    automated, by using formal verification to replace testing.

  - to enable correct by construction, by making specification
    inherently part of the construction (constraining interfaces,
    component invariants, LTS based testing, data flow and invariant
    specification) instead of separate tests.

Since its inception, the project has gone a long way towards that goal.
Version "2.9" was the last closed, cloud-based release.  Version "2.10"
release was serverless, client-only.  Version "2.11" included support
for a Dezyne-IDE.  Version "2.12" included a Dezyne-IDE on par with
"2.9".  Version "2.13" included a system simulator, removing the last
remaining copy of the archaic object model parser, finally allowing for
future language changes and extensions.

Dezyne "3.0" has long been the milestone to mark the transition of
Dezyne to a free software project: https://dezyne.org.  This has been
prioritized to the "2.14" release.

Below is a list of items we want leading up to version "3.0" of Dezyne.

You're welcome to discuss this road map on dezyne-devel@nongnu.org or
#dezyne on Libera Chat!

* TODO
** Release 2.21
  - Refactor transformations
    + Finish and merge wip-transform
  - ast/tree cleanup, serialization and name lookup
    + Finish and merge wip-serialize
    + Finish and merge wip-lookup
  - WFC performance
  - Show defer skip and function call and return in the trace.

** Release 2.22
  - External debugging
    + Finish and merge wip-trivial-runtime
    + Finish and merge wip-external
    + Finish and merge wip-sequential

** Release 2.23
  - Remove the need for a daemon
    + Parsing performance
    + Serialization performance
    + Normalization performance

** Release 2.24
  - Early return / deprecate reply
    + Finish and merge wip-return
  - Fully replace dzn traces with dzn test, i.e. LTS-based testing
    + Finish wip-lts-test

** Release 2.25
  - Data
    + Port parameters for global functions
    + Port parameters for foreign functions
    + Behavior for foreign functions
    + Data with state (control parameters)
    + Structured state types
  - Deprecate injected, replace with foreign (and global) functions

** Release 2.26
  - Data
    + Data behavior (data interfaces, data shims)
    + C: Support data with dzn_pump_run

** Release 2.27
  - Finish and merge wip-stitch
    + Cleanup dzn/lts.scm!
  - Replace dzn traces with dzn test, i.e. LTS-based testing

** Release 2.28
  - Module
    + Module specifications (aka aggregate interfaces)
  - Functional verification
  - Module based testing:
    + Develop single threaded approach to testing on scheme prototype.
  - Active system (thread-safe-shell) abstraction: external & blocking

** Release 2.29
  - Impossible futures
    + XFAIL: compliance_livelock
    + XFAIL: compliance_livelock_escape
    + XFAIL: compliance_livelock_refusal
    + XFAIL: external_blocking_livelock

** Release 2.30
  - Hierarchical behaviors (sub machines)

** Release 3.0
  - Simplify grammar through syntax
    + Retire UK English spelling of 'behaviour'
    + extern => data
    + external => delayed
    + Get rid of "illegal" => "violation" (?)
      (See <https://www.gnu.org/prep/standards/html_node/GNU-Manuals.html#GNU-Manuals>)
    + Remove concept of "event" if favor of a "message" that can be defined and
      either sent or received => Rethink "on" and "action".
    + reconsider '.' as infix operator for scoping, field test (Pauls
      sugar), port event separator, ...
    + Move to DSL in Scheme, reduce C-like language parser to "just
      another convenient-for-some frontent".
  - Spritely Goblins?
  - Documentation
    + Finish and merge wip-doc-snippets branch.
      - Merge snippets/tests with doc/dezyne.texi.
      - Remove error messages.
      - Generate images.
  - Language support
    + c: blocking, defer
    + javascript: blocking (?), defer
  - Full foreign support
    + Generated main
    + Simulate system with foreign with requires port
    + State diagram system with foreign with requires port
  - Rename sut to <sut>.
    + DRAFT vm: Use <sut> to avoid potential naming clash.
    + generated code
    + dzn/commands/trace
  - Fix ambiguities:
    + Puntje van Paul aka Paul sugar aka field test in language
    + Use before define (see LSP/wfc)?
  - Disable internal tracing in code, such that simulator can reproduce
    the internal tracing (including state).
  - Verify
    + persistent (aka delayed inspection) (Alarm.verify)?
    + drop --all?
    + memoize or remove oeverloos redundant interface verification
  - Simulate
     + show trace in all diagrams consistently and interactively
  - Lazy import in lookup
    + Lazy well-formedness checking?
    + What about normalizations, must be lazy too?
  - UX
    + wfc: check for reply on modeling event
    + vm: <modeling-reply-error> reply on modeling event
  - Documentation
    + Finish and merge wip-doc
      - Execution Semantics: generate!
  - LSP
    + drop in favor of tree-sitter?
    + move ast/wfc.scm tests into PEG parser
    + move ast/wfc.scm tests into TREE postprocessor?
  - Module based testing:
    + develop single threaded approach to testing on scheme prototype.
** After Release 3.0
  - Language extensions
    + General purpose language
  - Documentation
    + Integration with IDEs.
    + i18n of dzn
    + i18n of doc/dezyne.texi.
    + Get translationproject.org involved.
  - Review dzn verify
    + add hash to (cached) asserts output
  - dzn code
    + Finish C99 support (what about MISRA-C?)
    + Finish JavaScript support
    + Review and finish Scheme support
    + Finish Python support
