ISTM there is no right or wrong answer.
There is just a question of what is most useful.
AFAICT, the code for dictionaries (and therefore the code for sets)
has always had identity-implies-equality logic. It makes dicts
blindingly fast for common cases. It also confers some nice
properties like making it possible to retrieve a NaN that has
been stored as a key; otherwise, you could store it but not
look it up, pop it, or delete it (because the equality test would
always fail). The logic also confers other nice-to-have
properties such as:
* d[k] = v; assert k in d # assignment-implies-contains
* assert all(k in d for k in d) # all-members-are-members
These aren't essential invariants but they do provide
a pleasant programming environment and make it easier
to reason about programs.
Another place where identity-implies-equality logic
is explicit is in Py_RichCompareBool(). That lets
methods in many other functions and methods work like
dicts and sets. It speeds them up and confers
some nice-to-haves like:
* mylist.append(obj) implies mylist.count(obj) > 0
* x = obj implies x == obj # assignment really works
There may be lots of other code that implicitly
makes similar assumptions. I don't know how you
could reliably find those and rip them out.
If identity-implies-equality does get ripped out,
I don't know what we would win. It would make it
possible to do some cute NaN tricks, but I don't
think you can defend against the general problem
of funky objects being able to muck-up code that
looks correct. You get oddities when an object
lies about its length. You get oddities when an
object has a hash that doesn't match its equality
function. The situation with NaNs and sorts is
a prime example:
>>> sorted([1.2, 3.4, float('Nan'), -1.2,
float('Inf'), float('Nan')])
[1.2, 3.4, nan, -1.2, inf, nan]
Personally, I think the status quo is fine
and that practicality is beating purity.
High quality programs are written every day.
Numeric programmers seem to have no problem
using NaNs as-is. AFAICT, the only actual
problem in front us is the OP's post where
he was able to surprise himself with some
NaN experiments at the interactive prompt.
Raymond
___
Python-Dev mailing list
Python-Dev@python.org
http://mail.python.org/mailman/listinfo/python-dev
Unsubscribe:
http://mail.python.org/mailman/options/python-dev/archive%40mail-archive.com