> 1. Code using cmp(string1, string2) will clearly run significantly > slower, calling string comparison 1 (when == obtains), 2 (when < > obtains), or 3 (when > obtains) times instead of always once only. I'd like to question the rationale behind this procedure. If a type has both tp_compare and tp_richcompare, and the application is performing cmp(o1, o2): Why is it then a good thing to emulate 3way compare using rich compare? I just changed the order in do_cmp, to the IMO more correct if (v->ob_type == w->ob_type && (f = v->ob_type->tp_compare) != NULL) return (*f)(v, w); c = try_rich_to_3way_compare(v, w); if (c < 2) return c; c = try_3way_compare(v, w); if (c < 2) return c; return default_3way_compare(v, w); With that, I got only a single failure in the test suite: test_userlist fails with exceptions.RuntimeError: UserList.__cmp__() is obsolete Tim thinks this is a bug in UserList, since __cmp__ is not obsolete; I agree. According to the CVS log, this implementation of do_cmp was installed in object.c 2.105, by gvanrossum, on 2001/01/17. What was the specific rationale for doing do_cmp in that order? Regards, Martin
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4