On Tue, Jun 16, 2015 at 7:39 AM, Pascal J. Bourguignon pjb@informatimago.com wrote:
Didier Verna didier@lrde.epita.fr writes:
Hi,
in general, I don't like the way ASDF tries to force you to comply with its own design choices and policy. This is especially true for component versioning. ASDF complains that it doesn't like my version numbers (which, in fact, are not only numbers ;-), but I'm not ready to give up on them. They're much more informative than ASDF's simplistic 1.2.3.
Alternatively, we could have:
(defsystem :foo :version-major 1 :version-minor 0 :version-release 42 :human-readable-version-string "1.0.gamma.XLII/pescadero:whasaaaaa")
or:
(defsystem :foo :version (1 0 42) :human-readable-version-string "1.0.gamma.XLII/pescadero:whasaaaaa")
First, the restriction on version format comes straight out of ASDF 1, that itself lifted it from Linux .so "semantic versioning" — even to the point of declaring that a major number change makes things not compatible anymore, which was reverted in ASDF 3 for going against practice in the CL community in addition to breaking version compatibility for ASDF itself.
What I did with ASDF 2 then ASDF 3 was "just" to fix bugs, tweak the semantics as above, and make the restrictions explicit rather than fail silently when they aren't followed.
One constraint of ASDF 1 was to remain minimal, which explains the design. Let's just say that ASDF 3 was based on a different idea of what the spec was for ASDF to be minimal at implementing, and ended up 10 times bigger than ASDF 1. Would implementing, e.g. Debian or RedHat version comparison be possible? Sure, but, having implemented them (in a different project, see e.g. in lisp my rpm package), I can tell they are butt-ugly and not necessarily better than ASDF's algorithm in addition to not being as minimal.
I kind of like the general idea of Pascal's proposal: separate a human-readable-version-string from an asdf-comparable-version-string. The exact names are to be determined. Maybe, by analogy with name and long-name, description and long-description, we could make that version (used by ASDF) and long-version (used by humans).
In any case, this change won't happen before 3.2 (at least) and using it will have to be conditional on #+asdf3.2 until it becomes ubiquitous (estimated delay: 2 years after release). In the meantime, all code has to make do with what ASDF can handle, or do without asdf version at all (not recommended).
NB: To define new methods, you'd have to define a new system class first, with methods on it, in a defsystem-depends-on.
__Pascal Bourguignon__ http://www.informatimago.com/ “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
This is a recycled old joke about airplane cockpits. I don't know how things go for factories, but in the case of airplanes, it also refers to the effects of regulations that force upon everyone antiquated unsafe technologies (i.e. human pilots) in the name of "safety" and actually as the result of protectionist lobbying.
—♯ƒ • François-René ÐVB Rideau •Reflection&Cybernethics• http://fare.tunes.org Solipsism is a lonely place. Psychopaths crave love, but can't get no satisfaction: even elected by millions, it's still non-people voting for them.