[Python-Dev] Keep default comparisons - or add a second set?

Jim Fulton jim at zope.com
Tue Dec 20 12:54:38 CET 2005


Jim Jewett wrote:
> PEP 3000 now suggests that dropping default comparison has become more
> than an idle what-if.
> 
> Unfortunately, one very common use case of comparisons is to get a
> canonical order.  If the order is sensible, all the better, but that
> is not strictly required.  One of Python's selling points (especially
> compared to Java) is that getting a canonical order "just works", even
> if the objects being sorted are not carefully homogenized by hand. 
> Python itself relies on this when comparing same-length dictionaries.
> 
> There are times when a specific comparison doesn't make sense (date vs
> a datetime that it includes), but these are corner cases best handled
> by the specific class that understands the specific requirements --
> classes that already have to override the comparison operators anyhow.
> 
> Even the recently posted "get rid of default comparisons" use case is
> really just an argument to make the canonical ordering work better. 
> The problem Jim Fulton describes is that the (current default)
> canonical order will change if objects are saved to a database and
> then imported to a different session.  Removing default comparisons
> wouldn't really help much; the errors would (sometimes) show up at
> saving instead of (maybe) at loading, but the solution would still be
> to handcode a default comparison for every single class individually.

I think you need to do a much better job of defining canonical ordering.

You've given two properties:

- It need not make sense. :)

- It must be consistent accross sessions

   Does this also mean accross different versions of Python?

   How about different operating systems and hardware?

   If I create and pickle a BTree with a bunch of object keys
   and reload that pickle in a different session, with a
   later version of Python on a different OS and Hardware
   architecture, will the keys still have the same order?

   I consider (obviously) this second property to be crucial.

Do you have any proposal for how to achieve these properties?

Jim

-- 
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 Python-Dev mailing list