[Python-ideas] Re: set arbitrary hash random seed to ensure reproducible results

2021-12-23 Thread Chris Angelico
On Fri, Dec 24, 2021 at 12:14 AM Hao Hu  wrote:
>- generalize the signature of __hash__(object) to __hash__(object,
> *args, **kwargs). In the default implementation, we discard the keyword
> "salt" and use the default fallback salt if the keyword is not present,
> otherwise we use the salt specified by the keyword.
>

That means that EVERY __hash__ implementation that calls hash() MUST
pass along all spare arguments. This is a breaking change that will
affect a lot of third-party code.

Changing a dunder's signature is a very big deal and needs a lot more
justification than this.

How important *is* it to be able to lock in the seed/salt (they're not
the same thing) when hashing arbitrary objects?

ChrisA
___
Python-ideas mailing list -- python-ideas@python.org
To unsubscribe send an email to python-ideas-le...@python.org
https://mail.python.org/mailman3/lists/python-ideas.python.org/
Message archived at 
https://mail.python.org/archives/list/python-ideas@python.org/message/XAZIFH4GHWIREGIGU5KHGZJJM3Y6NDJZ/
Code of Conduct: http://python.org/psf/codeofconduct/


[Python-ideas] Re: set arbitrary hash random seed to ensure reproducible results

2021-12-23 Thread Hao Hu

On 12/23/21 07:39, Stephen J. Turnbull wrote:


Hao Hu writes:
  > On 12/18/21 08:44, Stephen J. Turnbull wrote:
  > > Hao Hu writes:

  > >   > >> For instance, if we create a caching programming interface that
  > >   > >> relies on a distributed kv store,
  > >
  > > I would be very suspicious of using Python's hash builtin for such a
  > > purpose.  The Python hash functions are very carefully tuned for high
  > > performance in one application only: equality testing in Python,
  > > especially for dicts.  [...]
  >
  > It is pretty much the same use case as python's dictionary though, the
  > goal is just to generalize it to use with a distributed kv store.

Sure, you know that because it's your application.  But I don't know
that, and it's only an example you give to justify a change to
Python.  The burden on you is not to argue that it works in one
application; it's to argue that it works broadly enough to be worth
changing a lot stuff in Python, imposing a change burden on any
project that implements __hash__ for any of its classes, and for
anybody who supports both pre- and post-change version of Python, they
need to support both __hash__(object) and __hash__(object, salt)
(probably trivial, just def __hash__(self, salt=None):, but I haven't
thought about it).


Thanks for thinking about all this. Those are reasonable concerns.

- The motivation of having such a discussion is indeed to figure out 
whether this small requirement could be crafted well enough for python's 
best interest.


- For the example mentioned above, I am wondering whether we could work 
around it like this:


  - generalize the signature of __hash__(object) to __hash__(object, 
*args, **kwargs). In the default implementation, we discard the keyword 
"salt" and use the default fallback salt if the keyword is not present, 
otherwise we use the salt specified by the keyword.



  > Another big advantage is that it is more user friendly to apply
  > *hash* directly on a type.

Sure, that was the whole point of proposing it and nobody denies it.




smime.p7s
Description: S/MIME Cryptographic Signature
___
Python-ideas mailing list -- python-ideas@python.org
To unsubscribe send an email to python-ideas-le...@python.org
https://mail.python.org/mailman3/lists/python-ideas.python.org/
Message archived at 
https://mail.python.org/archives/list/python-ideas@python.org/message/DJNRQBSPZ2VBZXVKMIDPESNKK4FE2NJW/
Code of Conduct: http://python.org/psf/codeofconduct/