caml-list - the Caml user's mailing list
 help / color / mirror / Atom feed
From: Xavier Leroy <Xavier.Leroy@inria.fr>
To: Thomas Fischbacher <Thomas.Fischbacher@Physik.Uni-Muenchen.DE>
Cc: Christian Lindig <lindig@cs.uni-sb.de>, Caml List <caml-list@inria.fr>
Subject: Re: [Caml-list] EQ hash tables?
Date: Wed, 12 Oct 2005 10:02:48 +0200	[thread overview]
Message-ID: <434CC328.7060803@inria.fr> (raw)
In-Reply-To: <Pine.LNX.4.61.0510111652370.10250@katrin.cip.physik.uni-muenchen.de>

> Actually, this brings me to a question I wanted to ask for a long time:
> while I never used this so far, I just assumed that OCaml does provide
> hash tables where keys are compared w.r.t. "being the same" ('==' , that
> is), rather than only hash tables where keys are compared for "being
> equal" (say, '=').

Easily definable using the functorial interface to hash tables:

module MyEqHashTable =
  Hashtbl.Make(struct
      type t = my_type_for_keys
      let equal = (==)
      let hash = Hashtbl.hash
    end)

> Of course, "EQ hash tables" have to be treated in a slightly special way
> when talking about stop&copy GCing.

No, not "of course".  You're thinking of using the address of a memory
block as its hash value.  This indeed requires GC support.  But you
can get the semantics you want (keys compared by reference) while
still computing the hash code structurally.  This is what the code
snippet above does.

- Xavier Leroy


  parent reply	other threads:[~2005-10-12  8:02 UTC|newest]

Thread overview: 8+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2005-10-10 13:42 [Caml-list] possible to define a type where = is forbidden ? yoann padioleau
2005-10-10 15:04 ` Thomas Fischbacher
2005-10-11 14:56   ` EQ hash tables? Thomas Fischbacher
2005-10-12  7:41     ` [Caml-list] " Hendrik Tews
2005-10-12  8:02     ` Xavier Leroy [this message]
2005-10-12 11:11       ` Thomas Fischbacher
2005-10-12 15:06         ` Xavier Leroy
2005-10-12 17:53           ` Thomas Fischbacher

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=434CC328.7060803@inria.fr \
    --to=xavier.leroy@inria.fr \
    --cc=Thomas.Fischbacher@Physik.Uni-Muenchen.DE \
    --cc=caml-list@inria.fr \
    --cc=lindig@cs.uni-sb.de \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).