Alternative Version implementation

David M. Lloyd david.lloyd at redhat.com
Wed Mar 23 18:46:01 UTC 2016


On 03/23/2016 09:20 AM, David M. Lloyd wrote:
> I've gone ahead and written a new Version implementation that implements
> the rules I've described.  It seems to work OK though I am having a hard
> time running all tests locally due to some environmental problem that
> I'm still working on, so I don't have a webrev yet.  But I do have a
> diff that can be examined (and commented upon) at [1].

One oddity that springs up relating to numeric versions when not 
normalizing the version string in any way is that version segments 
leading zeros parse and sort strangely.  After fiddling around with 
various approaches, currently I've settled on this order:

  1
  1.0
  1.1
  1.00
  1.01
  1.10
  1.11
  1.000
  1.001
  1.010
  1.011
  1.100
  1.101
  1.110
  1.111

Wherein versions are sorted for length first, then for value.  However 
that might be counter-intuitive if your expectation is that (for 
example) 1.0 is equal to 1.00 or at least sorts immediately before or 
after it.  A good case could be made that versions should be normalized 
to strip leading zeros, and I believe the previous implementation did 
this (either intentionally or unintentionally) as an implementation 
side-effect.  The downside of normalization is the extra work and extra 
String being produced as a result.

A third option would be to reject version segments with leading zeros, 
which prevents the problem from coming up and also avoids the extra copy 
work, making the "number" production look like:

    number = ? Unicode decimal digit with values 1-9 ? { ? Unicode 
decimal digit ? }

Any thoughts on this would be appreciated.
-- 
- DML


More information about the jpms-spec-experts mailing list