[Distutils] Requirent specifiers specified? :)

Jim Fulton jim at zope.com
Thu Jun 22 22:54:03 CEST 2006

I think you are making a mistake to assume that everyone has the same  
notion of obvious
that you do.  For example, someone could reasonably expect that ==1.0  
matches 1.1.1.
(I'm not advocating this interpretation, but simply pointing out that  
"obvious" is not

In addition, people sometimes make typos.  A system that figures out  
what they "really meant"
rather than complain when they enter something that doesn't make  
sense isn't doing them any

In any case, I expect that having people build tools on top of  
setuptools is a use case
you anticipated.  For people to do that, they sometimes need precise  
of behavior.


On Jun 22, 2006, at 4:36 PM, Phillip J. Eby wrote:
> At 04:08 PM 6/22/2006 -0400, Jim Fulton wrote:
>>>> So given:    >1, <3, >5, <7
>>>> You are sure that 4 is accepted?
>>> Scanning left to right, >1 is a lower bound and 4 is above it, so
>>> that's a tentative accept.  Next we see <3, and it is an upper
>>> bound, and we fall below it, so it is a sure accept at that point,
>>> and we stop scanning.
>> Huh? 4 is below 3?
> Hm, somehow I got confused with 2.  It should say, <3 is an upper  
> bound, 4 is above it, tentative reject.  >5 is a lower bound, 4 is  
> below it, it's a sure reject.  I think I copied 2 in from another  
> example while editing.
>>>> Given:  <2, <5
>>>> Is 3 accepted or rejected?
>>> <2, upper bound, 3 is above, tentative reject.  <5, upper bound, 3
>>> is below it, sure accept.  (Intuitively -- at least for me -- <5 is
>>> paired with >-infinity here.)
>> OK.  I think that many people would find this non-obvious.
> You keep missing the big picture.  The algorithm is designed to  
> interpret a *meaningful* list of versions *specified by a human*.   
> Humans are usually not excessively redundant, and will thus tend to  
> express a version requirement in the form of ranges with exceptions.
> Humans tend to think that it is obvious that if they ask for a  
> version <5, they do not need to also specify that the version be  
> more than negative infinity, or even that it be greater than zero.   
> It is, after all, a *version* number.  :)
> Similarly, if I ask for a version >10, I assume that you will  
> understand I want it to be less than negative infinity.  :)
> If it weren't for the fact that '.' and '-' are often used in  
> version numbers, I might have used range expressions using '-' or  
> '...', but these are also harder to read for the most common case  
> where you want '>=someversion'.
>> Ah, so in your explanation above, "f the version falls below a lower
>> bound"
>> only applies to a scanning position.  OK, that clarifies this case.
> If you look back at my previous descriptions, the concept of  
> scanning is repeated many times, including the simple 1-paragraph  
> description.  It's all scanning, just like a human would do when  
> reading a series of version requirements.
>> I think that the fact that you need to understand a non-trivial
>> algorithm
>> with a state machine to understand how non-trivial specifications are
>> interpreted is a problem.
> It's only a problem if you try to reduce it to an algorithm.  If  
> you simply try to *understand* a version requirement, it's really  
> quite straightforward.  Think of what the human who wrote the  
> requirement is saying:
> "Um, let's see, it should be less than version 3, because that  
> version's got a new API, and it should be more than version 1.2,  
> because there were some bugfixes, and oh yeah, don't use version  
> 1.6 because it was just plain hosed.  Oh, and 1.1.3 is also good."
> The algorithm is designed to correctly interpret a person who is  
> simply recording their wishes in this manner -- describing a series  
> of acceptable or unacceptable ranges, and mentioning specific  
> versions that are exceptions to the ranges.
>>   Maybe it's enough to tell people "don't
>> use complex specifications", but maybe it would be better to use a
>> simpler system.
> People don't normally express themselves redundantly -- especially  
> programmers.  The target users of specifications are these humans,  
> not the programmers trying to interpret the specification for  
> specifications.  I did not anticipate that particular user and use  
> case.  ;)

Jim Fulton			mailto:jim at zope.com		Python Powered!
CTO 				(540) 361-1714			http://www.python.org
Zope Corporation	http://www.zope.com		http://www.zope.org

More information about the Distutils-SIG mailing list