hash functions and other comments Alex Shinn (08 Sep 2015 06:19 UTC)
Re: hash functions and other comments John Cowan (08 Sep 2015 12:57 UTC)
Re: hash functions and other comments Alex Shinn (08 Sep 2015 13:32 UTC)
Re: hash functions and other comments John Cowan (08 Sep 2015 14:59 UTC)
Re: hash functions and other comments Alex Shinn (09 Sep 2015 04:29 UTC)
Re: hash functions and other comments John Cowan (09 Sep 2015 13:18 UTC)
Re: hash functions and other comments Alex Shinn (10 Sep 2015 02:09 UTC)
Re: hash functions and other comments John Cowan (10 Sep 2015 03:46 UTC)
Re: hash functions and other comments Arthur A. Gleckler (10 Sep 2015 03:56 UTC)
Re: hash functions and other comments Alex Shinn (10 Sep 2015 10:05 UTC)
Re: hash functions and other comments Kevin Wortman (11 Sep 2015 19:01 UTC)
Re: hash functions and other comments John Cowan (11 Sep 2015 19:51 UTC)
Re: hash functions and other comments Alex Shinn (12 Sep 2015 06:29 UTC)
Re: hash functions and other comments John Cowan (12 Sep 2015 22:16 UTC)
Re: hash functions and other comments Alex Shinn (15 Sep 2015 03:23 UTC)
Re: hash functions and other comments John Cowan (15 Sep 2015 11:31 UTC)
Re: hash functions and other comments Alex Shinn (15 Sep 2015 12:57 UTC)
Re: hash functions and other comments Alex Shinn (16 Sep 2015 03:01 UTC)

Re: hash functions and other comments John Cowan 08 Sep 2015 12:57 UTC

Alex Shinn scripsit:

>     The implementation may substitute a more efficient hash function for
>     any user-specified hash function, if it can prove that the substitute
>     is valid for the equality predicate as described above.  Specifically,
>     this allows the use of addresses as hashes, in which case the keys
>     must be rehashed if they are moved by the garbage collector.

That seems to give up too much control to the implementation.  Suppose the
default hash for strings is high-quality, as I would expect it to be.
A particular application, however, may want to trade off quality for
hashing speed by substituting its own hash function.  You are licensing
the implementation to just discard that and use its own superior hash
function in all cases.

> Hash functions need not be idempotent - in fact, they can't
> be if the keys are not integers.

Can you explain that?

> There's no discussion of the trade-offs involved in perfect
> hashes.  The requirements seem to forbid them by requiring
> amortized O(1) on mutation, but if that were relaxed we could
> have guaranteed (non-amortized) O(1) on access.  It's probably
> better to leave this to a separate data-structure to support the
> frequent update case, but I thought I'd mention this.

Unpack this, please.

> I'm not fond of the name hash-table-extend! as the common
> case seems to be not to extend, but I realize this has precedence
> in Racket and don't have great alternative suggestions.  Maybe
> hash-table-ensure! or hash-table-cache!.

The whole function is somewhat problematic: see my previous posting.

> It doesn't seem to be useful to omit failure in hash-table-extend!.

Or success in hash-table-replace!.

> Either way, the description is hard to read.

I'll work on that.

> If we're going to have -push! and -pop! conveniences, I think
> -inc! and -dec! should be there too.  I use them much more
> often.

Reasonable.

> Bimaps are useful but perhaps an order of magnitude less
> so than hash tables - I'd rather these be in a separate library.

As a matter of personal policy, I'm not trying to make packaging decisions
at this point.  I think when we decide what goes into R7RS-large and what
doesn't, we'll need to have a conspectus of all SRFIs and packaging for
them, as we did for R7RS-small.

--
John Cowan          http://www.ccil.org/~cowan        xxxxxx@ccil.org
Linguistics is arguably the most hotly contested property in the academic
realm. It is soaked with the blood of poets, theologians, philosophers,
philologists, psychologists, biologists and neurologists, along with
whatever blood can be got out of grammarians. - Russ Rymer