Skip to content

Which models for evolving while maintaining compatibility? #6043

@herbelin

Description

@herbelin

As recommended by @Zimmi48, I copy here a digression started in PR #876 about compatibility. See e.g. also #915 (fix to rewrite in *) or #991 (unifall) for other bits of discussion.

Two questions

  • how to allow compatibility internally and to which extent?
  • what user-level model(s) to support compatibility?

Supporting compatibility models internally

In an absolute compatibility-preserving model, every little change would come protected by an internal flag which deactivates the change under some compatibility mode, and this independently of the user-level model for changes, i.e. independently of whether there is a specific user-level flag, a per-tactic versioning, a per-release versioning of the whole set of tactics, etc.

But such absolute-compatibility-preserving model might eventually lead to obfuscated code, with,

  • either eventually a lot of if version N then bla else foo in it, with progressive obfuscation, difficulty to have a code easy to read for newcomers, etc.
  • or, in case we radically duplicate code, to duplication of maintenance work, difficulties to keep code synchronous, etc,

So maybe, instead of looking for an absolute model, one could make an evaluation change by change of whether it is worth supporting different behaviors.

Different user-level possible models

  1. do we continue to propose a model of individual flags with a risk of proliferation which makes things more and more complicated?
  2. do we move to tactic-based versioning?
  3. do we move to a global versioning of the set of tactics?
  4. do we recommend a model of ifdef in Coq files?
  5. a mix of those?

What was @mattam82 proposing? Was it more 2. or 3.?

Also, do we continue a policy of deprecation basically expecting users to update their development at latest every 2 years? On one side, this is necessary for reducing the maintenance load for developers, on the other side, this is taking the risk of loosing developments whose updating would be too costly. I must confess that I'm a bit all at sea ("dans le brouillard") wrt these questions.

Metadata

Metadata

Assignees

No one assigned

    Labels

    kind: questionIssues seeking an answer to a question. Consider asking on zulip instead.
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions