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
- do we continue to propose a model of individual flags with a risk of proliferation which makes things more and more complicated?
- do we move to tactic-based versioning?
- do we move to a global versioning of the set of tactics?
- do we recommend a model of
ifdef in Coq files?
- 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.
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
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,
if version N then bla else fooin it, with progressive obfuscation, difficulty to have a code easy to read for newcomers, 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
ifdefin Coq files?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.