[Python-Dev] Intricacies of calling __eq__

Kevin Modzelewski kmod at dropbox.com
Wed Mar 19 07:38:53 CET 2014


Sorry, I definitely didn't mean to imply that this kind of optimization is
valid on arbitrary subscript expressions; I thought we had restricted
ourselves to talking about builtin dicts.  If we do, I think this becomes a
discussion about what subset of the semantics of CPython's builtins are
language-specified vs implementation-dependent; my argument is that just
because something results in an observable behavioral difference doesn't
necessarily mean that it's a change in language semantics, if it's just a
change in the implementation-dependent behavior.


On Tue, Mar 18, 2014 at 9:54 PM, Stephen J. Turnbull <stephen at xemacs.org>wrote:

> Kevin Modzelewski writes:
>
>  > I think in this case, though, if we say for the sake of argument
>  > that the guaranteed semantics of a dictionary lookup are zero or
>
> I don't understand the point of that argument.  It's simply false that
> semantics are guaranteed, and all of the dunders might be user
> functions.
>
>  > more calls to __hash__ plus zero or more calls to __eq__, then two
>  > back-to-back dictionary lookups wouldn't have any observable
>  > differences from doing only one, unless you start to make
>  > assumptions about the behavior of the implementation.
>
> That's false.  The inverse is true: you should allow the possibility of
> observable differences, unless you make assumptions about the behavior
> (implying there are none).
>
>  > To me there seems to be a bit of a gap between seeing a dictionary
>  > lookup and knowing the exact sequence of user-functions that get
>  > called, far more than for example something like "a < b".
>
> The point here is that we *know* that there may be a user function
> (the dunder that implements []) being called, and it is very hard to
> determine that that function is pure.
>
> Your example of a caching hash is exactly the kind of impure function
> that one would expect, but who knows what might be called -- there
> could be a reference to a database on Mars involved (do we have a
> vehicle on Mars at the moment? anyway...), which calls a pile of
> Twisted code, and has latencies of many seconds.
>
> So Steven is precisely right -- in order to allow this optimization,
> it would have to be explicitly allowed.
>
> Like Steven, I have no strong feeling against it, but then, I don't
> have a program talking to a deep space vehicle in my near future.
> Darn it! :-(
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/python-dev/attachments/20140318/7fdc594b/attachment.html>


More information about the Python-Dev mailing list