Thoughts on versioning

Andrei Alexandrescu SeeWebsiteForEmail at
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 
>> problem.
> 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 
> mitigate?".
> 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 mailing list