<div dir="auto">As ben says, a lot of our tools have made choices over time that make having the odd vs even convention super easy to support for compiler and library devs doing experiments with ghc builds that are based off master.  </div><div dir="auto"><br></div><div dir="auto">No matter what, any naming scheme is a social construct for communicating with tools and humans.  And I def agree that “how to interpret a ghc version number” is a useful thing to make more readily explained, any convention that changes the way cabal/library authors can experiments to suport / evaluate how features in an unreleased ghc work for them has a nontrivial engineering cost footprint. </div><div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Tue, Mar 2, 2021 at 7:26 AM Ben Gamari <<a href="mailto:ben@smart-cactus.org">ben@smart-cactus.org</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Sebastian Graf <<a href="mailto:sgraf1337@gmail.com" target="_blank">sgraf1337@gmail.com</a>> writes:<br>
<br>
> Hi,<br>
><br>
> I generally would like +0.1 steps, but mostly because it causes less<br>
> head-scratching to everyone new to Haskell. Basically the same argument as<br>
> Richard says.<br>
><br>
> I can't comment on how far head.hackage (or any tool relies) on odd version<br>
> numbers, I certainly never have. Given that it's all overlays (over which<br>
> we have complete control), does it really matter anyway? When would we say<br>
> <=9.1 rather than <=9.2? Shouldn't 9.1 at one point become binary<br>
> compatible with 9.2, as if it really was "9.2.-1" (according to the PVP,<br>
> 9.2.0 is actually > 9.2, so that won't work)? I think there are multiple<br>
> ways in which we could avoid using 9.1 as the namespace for "somewhere<br>
> between 9.0 and 9.2 exclusively". We have alpha releases, so why don't we<br>
> name it 9.1.nightly?<br>
><br>
One reason is that our versioning data model (as captured by Data.Version)<br>
now only admits numeric version components. Textual tags were previously<br>
admitted but deprecated in #2496 as there is no clear ordering for such<br>
versions.<br>
<br>
<br>
>> majormajor.odd.time stamp<br>
><br>
> TBH, I found the fact that the *configure* date (I think?) is embedded in<br>
> the version rather annoying. I sometimes have two checkouts configured at<br>
> different dates but branching off from the same base commit, so I'm pretty<br>
> sure that interface files are compatible. Yet when I try to run one<br>
> compiler on the package database of the other (because I might have copied<br>
> a compiler invocation from stdout that contained an absolute path), I get<br>
> an error due to the interface file version mismatch. I'd rather have a<br>
> crash or undefined behavior than a check based on the configure date,<br>
> especially since I'm just debugging anyway.<br>
<br>
I disagree here. Personally, if I do something non-sensical I would much<br>
rather get predictable version error than be sent off on a wild-goose chase<br>
debugging ghosts. Fixing an incorrect command-line takes a few seconds;<br>
finding a bizarre runtime crash due to subtly wrong ABI may take days.<br>
This is why I generally plop any test command-line of non-trivial length<br>
into a shell script; it makes safely switching between compilers much<br>
easier.<br>
<br>
Cheers,<br>
<br>
- Ben<br>
</blockquote></div></div>