caml-list - the Caml user's mailing list
 help / color / mirror / Atom feed
From: "David Allsopp" <dra-news@metastack.com>
To: <caml-list@yquem.inria.fr>
Subject: RE: [Caml-list] Hash clash in polymorphic variants
Date: Fri, 11 Jan 2008 18:40:53 -0000	[thread overview]
Message-ID: <000c01c85481$7f727120$6c7ba8c0@countertenor> (raw)
In-Reply-To: <200801111114.03876.ober.14@osu.edu>

Kuba Ober wrote:
> On Friday 11 January 2008, Jon Harrop wrote:
> > On Friday 11 January 2008 13:30:29 Kuba Ober wrote:
> > > Are those collisions of any real importance? I mean, do they break
> > > anything? If all they do is imply linearly searching a list of a few
> > > elements, for the colliding entry, then it's a non-issue?
> >
> > It would prevent code from compiling so it would be a complete
> > show-stopper.
>
> So what you're saying is that the implementation uses the hash with bucket

> size of 1? That's kinda poor decision, methinks.

I think you're missing the context - there's no hash table. See 18.3.6 in
the manual - the hashed values (and resulting collisions) are to do with the
internal representation of polymorphic variants.

The compiler cannot process code that uses two polymorphic variants whose
tag names will have the same internal representation (and therefore be
incorrectly viewed as having the same value). The test is probably performed
somewhere in the type checker...

An alternative implementation might have been to lookup the tags (in a
perfect hash table) using a system similar to caml_named_value but I imagine
that the present method was preferred because it's simpler (and quite
possibly faster) and collisions are rare (as Eric pointed out) - although in
Jon's case the lack of a guarantee is unfortunate.

Incidentally, and off-the-subject here, using a hash table with a bucket
size of 1 is very important if you need performance guarantees on your hash
table and have some other way of coping with collisions.


David


  reply	other threads:[~2008-01-11 18:41 UTC|newest]

Thread overview: 37+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2008-01-10 17:09 Jon Harrop
2008-01-10 20:35 ` [Caml-list] " Eric Cooper
2008-01-10 21:24   ` Jon Harrop
2008-01-10 21:40     ` David Allsopp
2008-01-11 13:30       ` Kuba Ober
2008-01-11 13:48         ` Jon Harrop
2008-01-11 16:14           ` Kuba Ober
2008-01-11 18:40             ` David Allsopp [this message]
2008-01-14 12:20               ` Kuba Ober
2008-01-14 14:44                 ` Stefan Monnier
2008-01-14 14:56                   ` [Caml-list] " Kuba Ober
2008-01-14 15:37                     ` David Allsopp
2008-01-14 15:44                       ` Kuba Ober
2008-01-14 16:03                         ` David Allsopp
2008-01-14 15:45                     ` Stefan Monnier
2008-01-15  3:36                     ` [Caml-list] " Jacques Garrigue
2008-01-15  4:59                       ` Jon Harrop
2008-01-15  9:01                         ` Jacques Garrigue
2008-01-15 18:17                           ` Jon Harrop
2008-01-15 19:20                             ` Gerd Stolpmann
2008-01-15 22:04                               ` Jon Harrop
2008-01-16 13:48                                 ` Kuba Ober
2008-01-16 15:02                                   ` Dario Teixeira
2008-01-16 19:00                                     ` Jon Harrop
2008-01-17 13:09                                     ` Kuba Ober
2008-01-18  5:33                                 ` Kuba Ober
2008-01-18  5:19                               ` Kuba Ober
2008-01-18  5:39                                 ` Kuba Ober
2008-01-16  3:26                             ` Jacques GARRIGUE
2008-01-16  3:34                               ` Yaron Minsky
2008-01-16  3:42                                 ` Jon Harrop
2008-01-16  4:40                               ` Jon Harrop
2008-01-16 16:03                                 ` Eric Cooper
2008-01-16 10:50                             ` Richard Jones
2008-01-14 17:14                   ` Jon Harrop
2008-01-14 17:36                     ` Alain Frisch
2008-01-11  0:15 ` [Caml-list] " Jacques Garrigue

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='000c01c85481$7f727120$6c7ba8c0@countertenor' \
    --to=dra-news@metastack.com \
    --cc=caml-list@yquem.inria.fr \
    /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).