The dictatorship of versioning

Pascal J. Bourguignon pjb at
Tue Jun 16 16:32:25 UTC 2015

Robert Goldman <rpgoldman at> writes:

> On 6/16/15 Jun 16 -9:31 AM, Didier Verna wrote:
>> Robert Goldman <rpgoldman at> wrote:
>>> Now: a request for management purposes: Didier, would you be so kind
>>> as to describe the proposal (I think cut and paste out of your earlier
>>> emails would do admirably) in a ticket on
>>   OK. I will also add Pascal's suggestion to have both a canonical and
>>   human readable version slot.
> I'm inclined to put that one on the side, mostly because I find Pascal's
> suggestion far less appealing.  I see two problems with this suggestion:
> 1. Further complicating an ASDF that's already grown far larger than the
> original
> 2. Duplication of function.  Software engineering is replete with
> failures where programmers are required to state the same information
> twice (e.g., comments or javadoc together with source code).
> Inevitably, the multiple forms of redundant information stray from each
> other.  So what happens when the programmer updates the human readable
> version and not the canonical version, or vice versa?  Wouldn't it be
> better to functionally derive one of these two forms from the other?
> E.g., (defgeneric formatted-version (component version-spec))
> I am also disinclined to add something like the proposed
>    :version-major 1
>    :version-minor 0
>    :version-release 42
> There are two reasons for my reluctance:
> 1. I don't think it's necessary.  If those slots are desired, it should
> be possible to extend the SYSTEM class for specific systems in order to
> accommodate these new flags, without changing the core of ASDF.
> If that's *not* true, then we should fix the protocols to make it true
> (and I'd welcome another ASDF ticket to this effect).
> 2. Adding this proliferation of version sub-flags to core ASDF seems
> undesirable for a number of reasons:
> * It would potentially radically complicate the parsing of systems.
> * Developers are already disinclined to put in :version specifiers:
> making the specification more complicated seems unlikely to improve that
> situation.
> * Adding more (and more verbose) flags would further detract from
> readability of DEFSYSTEM forms by burying their true content in ever
> more metadata.
> * Finally, I don't see that this provides advantage over :version
> "1.0.42" together with functions for manipulating said version string
> (e.g., (defgeneric major-version (component version-string) ).
> In sum, this seems like a lot of new hair for limited payoff to the
> community.

Agreed, spliting version is bad.

On the other hand, using a list of integer as version could be an
improvement, since it would make it clear what a version is.

     :version (1 0 42)

Of course, Didier already perverted the idea by writing something like:

     :version (1 3 :beta 4 "Release Name")

In cesarum, I solved the problem with the heuristic of "parsing" and
filtering out non-integers from the version strings, to obtain a
normalized version number.  

version ::= [a-z]* integer ('.' integer)* ('.' [a-z]+)? (+|[a-z]|'r' integer)? ('(' /.*/)?

cl-user> (use-package :com.informatimago.common-lisp.cesarum.version)
cl-user> (version (lisp-implementation-version))
(1 10 16196)
cl-user> (version "1.10-r16196.beta.42.yosemite (x86) happy hacking.3")
(1 10 16196)
cl-user> (version "1.10.4")
(1 10 4)

(mapcar (function version)
          "Version 1.10-r16196  (LinuxX8664)"
          "2.49+ (2010-07-17) (built 3603386203) (memory 3603386298)"
          "20d (20D Unicode)"
-->  '((1 3 1) (1 10 16196) (2 49 1) (20 3) (13 5 1) (1 0 57 0))

__Pascal Bourguignon__       
“The factory of the future will have only two employees, a man and a
dog. The man will be there to feed the dog. The dog will be there to
keep the man from touching the equipment.” -- Carl Bass CEO Autodesk

More information about the asdf-devel mailing list