[m-rev.] for review: rationalise hash functions across the standard library

Julien Fischer jfischer at opturion.com
Tue Feb 11 14:19:22 AEDT 2020


Hi Peter,

On Tue, 11 Feb 2020, Peter Wang wrote:

> On Tue, 11 Feb 2020 12:19:12 +1100 (AEDT), Julien Fischer <jfischer at opturion.com> wrote:
>>>
>>> Related: should we move towards using hash functions that return uints?
>>
>> Ultimately, the hash table implementation requires indexing into an
>> array and some of our target languages only support array indexing with
>> a signed integer type. (Indeed some of them require the index to be a
>> 32-bit type as well, IIRC, so maybe we should move towards hash funtions
>> that return an int32?)
>
> Hash functions are more naturally implemented with unsigned ints, at
> least in C, where left shifting of signed ints is fraught with
> undefined behaviour.

I don't have any objections to moving to unsigned integers.  I would
like whatever we end up with to be a little more well thought out
than what's currently present in the library.  Perhaps, we should move
to have hashable type class?

> If callers want fewer bits they can truncate it themselves, which they
> have to do anyway.

True.

>>> should the hash table modules take a hash *function* instead of a
>>> predicate?
>>
>> I wondered about that too.  Given that Ralph was so keen on using
>> fuctions everywhere else it's a bit odd that he decided to use a
>> predicate there ...
>
> The original implementation required two hash values.

Ah, that explains it!

> When I changed it to require only one hash value, I didn't change the
> hash predicates to functions.

I have no objection to changing it to a function; we should be able to
add wrappers that also preserve the existing interface.

Julien.


More information about the reviews mailing list