Ordering of versions
cowwoc
cowwoc at bbs.darktech.org
Mon Nov 14 17:36:41 PST 2011
Hey Neil,
On 14/11/2011 8:19 PM, Neil Bartlett wrote:
> On Mon, Nov 14, 2011 at 6:20 PM, cowwoc<cowwoc at bbs.darktech.org> wrote:
>> On 14/11/2011 11:17 AM, Neil Bartlett [via jigsaw-dev] wrote:
>> [snip]
>> Borrowing an analogy from Maven, you'd load the pom.xml file
>> separately from the main artifact. The pom.xml provides you with the
>> module metadata (version comparison in this case) and if you decide to
>> proceed to fetch the rest of the module.
> The analogy is bogus. Maven's POM -- like OSGi's manifest and Jigsaw's
> module-info.java -- is a declarative XML format, not an executable. We
> don't need to run any part of the module before we resolve the model,
> we only need to read the metadata and execute the comparison which
> exists inside the module system.
It doesn't matter whether it's a declarative XML format or an
executable. So long as the Comparator does not depend on any part of the
Module, it can be downloaded and executed independently just like the
pom.xml file.
>> 1) Treat the version comparator as a first-class citizen. There is one
>> comparator across all versions of a module and developers may replace it
>> as needed.
> How do I replace the comparator when I find it has a bug? Presumably
> until my new module with its new comparator can be installed, it must
> be compared against the current installed module using the current
> installed comparator. If the bug is as serious as, say, compareTo()
> returning +1 irrespective of the arguments, then the current module
> will always be considered higher than any replacement.
You're assuming that the Comparator is only replaced by the
Comparator from a higher version. I'm saying that the Comparator exists
outside the scope of any specific version. It applies module-wide. As
such, you can replace the Comparator without needing to evaluate the old
Comparator. It doesn't matter whether your version is "newer" or
"older", you just replace whatever is there.
>> 2) Each version has its own comparator. The first version that matches
>> the desired version-range gets used. In my opinion, the ability to
>> specify arbitrary version schemes is worth the risk of asymmetric
>> results similar to Objects.equals().
> Well I'm glad you see the risk, but I don't yet see the benefit. Is it
> really useful for different modules to be able to redefine ordering of
> versions? This is almost like each module wanting its own set of
> natural numbers.
Take a look at software projects in the world. Almost no two use
the same versioning scheme. The "benefit" is that we support the
de-facto standard which is to say these people have a good reason for
using different version schemes and there is no reason to believe we
know better than them. I consider version schemes to be the same as
code-formatting rules. They're highly subjective, there is no "right
answer" and enforcing a rigid "standard" is bound to piss many people off.
>> You could mandate that the Comparator operate deterministically,
>> and then cache the results.
> Please forgive the following diversion: a Russian friend once told me
> this joke that was popular during the old Soviet days. Stalin,
> Khrushchev and Brezhnev are riding a train together, and the train
> breaks down. Stalin goes and shoots the driver and engineer, but this
> doesn't solve the problem, the train doesn't move. Khrushchev offers
> the (new) driver and engineer a nice flat in the suburbs of Moscow,
> but this doesn't work either, and the train still doesn't move.
> Brezhnev stands up and declares, "I will fix this problem". He closes
> all the curtains in the train carriage, sits down and states "see, now
> we are moving".
>
> Mandating that a comparator must be deterministic is far less reliable
> than using pure declarations and controlling the comparison within the
> module system. Again, what's the benefit to balance this risk?
Heh. Good joke ;) Okay, so I guess we have to agree to disagree. I
completely see your point about the safety of a declarative model, but I
personally prefer the flexibility of an imperative model. I respect your
views on the matter.
Gili
More information about the jigsaw-dev
mailing list