[Python-Dev] Comparison speed

Guido van Rossum guido@digicool.com
Sun, 20 May 2001 09:56:54 -0400


> If the time machine batteries can hold a full charge, you may want to go back
> and add Py_CMP as a seventh possible desired-operation argument to tbe rich
> comparison API.

Funny, I was thinking about this too last night.

> My experience with dict comparisons was that dict_richcompare
> couldn't compute Py_LT/LE/GT/GE any cheaper than by doing a full
> cmp, so I put the dict oldcmp back in order to avoid having dict
> richcmp (potentially) compute cmp 3 times to fake one cmp.  But if
> dict richcmp knew a cmp outcome was desired, it could compute it
> with no extra work to speak of.  Then there would be no reason at
> all to hold on to the dict tp_compare slot.

I'm not sure I see the saving.  There's no real saving in time,
because you still have to make separate calls for EQ and CMP, right?

There might be a saving in code, but you could solve that internally
in dictobject.c by restructuring the code somewhat so that
dict_compare shared more with dict_richcompare, right?

It's mostly an API streamlining.  The other difference between
tp_compare and tp_richcompare is that the latter returns an object
which makes testing for errors unambiguous.

But (for several releases) we would still have to support tp_compare
for b/w compatibility with old 3r party extensions.

> The list and tuple richcmps are also doing almost all the work needed to
> compute a 3-way cmp outcome.

Ditto.

--Guido van Rossum (home page: http://www.python.org/~guido/)