Thoughts on versioning
SeeWebsiteForEmail at erdani.org
Wed Oct 27 13:55:12 UTC 2021
On 10/27/21 3:44 AM, Sebastiaan Koppe wrote:
> On Tuesday, 26 October 2021 at 14:43:19 UTC, Andrei Alexandrescu wrote:
>> I regret I forgot to mention in the initial post that we're not
>> looking at v2. We're looking at v2, v3, v4, ... released e.g. at an
>> annual or trienal pace. It's the having a fish vs. knowing how to fish
> That does change things. Obviously the copy/paste approach isn't going
> to work then.
> Whenever people have to maintain several versions of a product what they
> often do is to implement the old version in terms of the new. From the
> outside it seems version 1 is still available but internally it is just
> version 2 + the quirks of version 1. That might not be possible
> everywhere, especially if the newer versions stray too much.
> It is not much different from what you propose, except that it doesn't
> penalize all the code to have extra version boilerplate around it
> (mixins, alias module). That might not be possible in certain cases
> because of a too intrusive change, where you can't write version 1 with
> version 2, and you either have to copy it (if it is small) or wrap it in
> version/behavior-selection code.
> You can end up in a situation where most of version 1 is implemented
> with version 2, except for a few annoying bits here and there. Which
> would also be acceptable as long as it isn't too much. The unanswered
> questions are "what is too much?", "how to measure/detect", "how to
> Ultimately it depends a lot on how well you can extract generic code
> usable for both versions. If the ratio generic code to version-specific
> quirk code is favorable then it can definitely work.
> It goes without saying, do this all in one repo please.
Thanks. Lots of good stuff here.
I'll set out to put together a WIP PR in phobos showcasing a couple of
artifacts migration. It will look ugly because I'll need to supplant
language support with string mixins and other tricks.
Then you and others could improve it and/or provide alternatives.
More information about the Digitalmars-d