Computing the next SemVer for dlang packages with dsemver

Sönke Ludwig sludwig at outerproduct.org
Thu Oct 22 15:50:45 UTC 2020


Am 22.10.2020 um 10:59 schrieb Robert burner Schadek:
> On Wednesday, 21 October 2020 at 17:55:00 UTC, Sönke Ludwig wrote:
> 
>> 0.x.y vs. 1+.x.y is about the development process/state. Quite often a 
>> design is not yet fully fleshed out in the beginning and there are 
>> many incremental changes to the API. If 0.x.y didn't exist, that would 
>> simply mean that either the project gets more or less stuck with the 
>> initial (bad) design, or that it quickly increments major versions, 
>> effectively providing no more stability as in the 0.x.y case.
> 
> I think that is the one mistake SemVer does. 0.x.y is just one big 
> loophole.
> After the 1.x.y release an breaking api change requires a major version 
> increment.
> The way it should be. Stability or unstable is only mentioned in the 0.x.y
> definitions.
> 
> You are not stuck on a bad design, break the api, improve the api, 
> increment the major version number.
> If you break the api in an 0.x.y version the hard part does not change.
> In both instances the users have to update their usage.
> 
> In know in theory 0.x.y should be considered unstable. But by amount of 
> 0.x.y we have you pretty much can't get anything done in D if you only 
> use stable packages.
> The loophole has become the normal case.
> 
> So what can we do, I see two major options:
> 1. we can live on the edge and use unstable packages and have no meaning 
> in the
>     SemVer number
> 2. we can acknowledge that most of them are stable, put a 1. in front 
> and ignore
>     the 0.x.y part of the SemVer definition and have the SemVer mean 
> something
> 
> dsemver does 2.
> 
> And true there might be cases where dsemver does not increment the 
> number correctly, but you can always increment by hand.
> 
> Also if your api is not stable after your 1.x.y release and you break 
> everything in 2.x.y, so what. Your users are also annoyed when you break 
> your api from 0.1.x to 0.1.1. Only difference is they could have seen in 
> coming by looking at the SemVer.
> 
> I should stop ranting now.
> 

The real alternative to 0.x.y is 1.0.0-alpha.1+, though, with the 
drawback that there is no supported means to still provide something 
like a distinction between breaking (x) and non-breaking (y) changes.

There is also value in having some kind of indicator that the code has 
reached a certain level of maturity (1.0.0).


More information about the Digitalmars-d-announce mailing list