[Python-ideas] incremental hashing in __hash__
Neil Girdhar
mistersheik at gmail.com
Fri Jan 6 04:02:23 EST 2017
On Fri, Jan 6, 2017 at 3:59 AM Paul Moore <p.f.moore at gmail.com> wrote:
> On 6 January 2017 at 07:26, Neil Girdhar <mistersheik at gmail.com> wrote:
> > On Fri, Jan 6, 2017 at 2:07 AM Stephen J. Turnbull
> > <turnbull.stephen.fw at u.tsukuba.ac.jp> wrote:
> >>
> >> Neil Girdhar writes:
> >>
> >> > I don't understand this? How is providing a default method in an
> >> > abstract base class a pessimization? If it happens to be slower
> >> > than the code in the current methods, it can still be overridden.
> >>
> >> How often will people override until it's bitten them? How many
> >> people will not even notice until they've lost business due to slow
> >> response? If you don't have a default, that's much more obvious.
> >> Note that if there is a default, the collections are "large", and
> >> equality comparisons are "rare", this could be a substantial overhead.
> >
> >
> > I still don't understand what you're talking about here. You're saying
> that
> > we shouldn't provide a __hash__ in case the default hash happens to be
> > slower than what the user wants and so by not providing it, we force the
> > user to write a fast one? Doesn't that argument apply to all methods
> > provided by abcs?
>
> The point here is that ABCs should provide defaults for methods where
> there is an *obvious* default. It's not at all clear that there's an
> obvious default for __hash__.
>
> Unless I missed a revision of your proposal, what you suggested was:
>
>
Yeah, looks like you missed a revision. There were two emails. I
suggested adding ImmutableIterable and ImmutableSet, and so there is an
obvious implementation of __hash__ for both.
> > A better option is to add collections.abc.ImmutableIterable that derives
> from Iterable and provides __hash__.
>
> So what classes would derive from ImmutableIterable? Frozenset? A
> user-defined frozendict? There's no "obvious" default that would work
> for both those cases. And that's before we even get to the question of
> whether the default has the right performance characteristics, which
> is highly application-dependent.
>
> It's not clear to me if you expect ImmutableIterable to provide
> anything other than a default implementation of hash. If not, then how
> is making it an ABC any better than simply providing a helper function
> that people can use in their own __hash__ implementation? That would
> make it explicit what people are doing, and avoid any tendency towards
> people thinking they "should" inherit from ImmutableIterable and yet
> needing to override the only method it provides.
>
> Paul
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/python-ideas/attachments/20170106/977e10b5/attachment-0001.html>
More information about the Python-ideas
mailing list