caml-list - the Caml user's mailing list
 help / color / mirror / Atom feed
From: Jacques GARRIGUE <garrigue@math.nagoya-u.ac.jp>
To: jon@ffconsultancy.com
Cc: caml-list@yquem.inria.fr
Subject: Re: [Caml-list] large parametrized polymorphic variant type combinations take forever to compile
Date: Wed, 11 Jul 2007 11:23:07 +0900 (JST)	[thread overview]
Message-ID: <20070711.112307.2004150273.garrigue@math.nagoya-u.ac.jp> (raw)
In-Reply-To: <200707110219.35727.jon@ffconsultancy.com>

From: Jon Harrop <jon@ffconsultancy.com>

> Isn't it a really bad idea to autogenerate polymorphic variant type 
> constructors anyway because, sooner or later, you'll get a hash clash? In 
> fact, wouldn't that be platform specific?

Indeed, a hash clash can happen. It will be detected at compile time,
but in a generated setting it may be harder to fix. Fortunately, at
least this is not platform specific: the hash function for variants is
defined only once and for all. Also, it is explicitly defined so that
names of up to 4 characters will all get different hash values.

On the other hand, as the intent of polymorphic variants is to be able
to use understandable constructor names, rather than complex
imbrications of datatypes, a large part of their interest is lost here.

> I would recommend factoring the sum type by the argument types of the 
> contructors in this case. Looking at Sam's files, this is trivial. Just 
> replace this:
[..]
> with this:
> 
> type t1 = [
> | `t1_int of [
>   | `a
>   | `a0
>   | `a10000 ] * int
> | `t1_float of [`b] * float
> ]

This is mostly a matter of taste, but this might help producing better
code, independently of the compilation time. Of course, one can also
think of types that you cannot decompose this way, if the type of the
argument is always different for instance.

Jacques Garrigue


  reply	other threads:[~2007-07-11  2:23 UTC|newest]

Thread overview: 29+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2007-06-06 16:30 compiling large file hogs RAM and takes a long time Sam Steingold
2007-06-06 16:51 ` [Caml-list] " skaller
2007-06-06 17:05   ` Sam Steingold
2007-06-07 15:52 ` Sam Steingold
2007-06-08  1:02   ` [Caml-list] " Jacques Garrigue
2007-06-08  1:51     ` skaller
2007-06-08  2:26       ` Yaron Minsky
2007-06-08  9:05       ` Thomas Fischbacher
2007-06-08  9:35         ` skaller
2007-06-08  9:55           ` Thomas Fischbacher
2007-06-08 13:39       ` Sam Steingold
2007-06-08 12:30     ` [Caml-list] " Jacques Garrigue
2007-06-15 15:41       ` Sam Steingold
2007-06-15 18:56         ` [Caml-list] " Jon Harrop
2007-06-15 20:06           ` Sam Steingold
2007-07-09 20:22 ` large parametrized polymorphic variant type combinations take forever to compile Sam Steingold
2007-07-09 22:45   ` Sam Steingold
2007-07-09 23:37   ` [Caml-list] " Jacques Garrigue
2007-07-10  7:09     ` Christophe Raffalli
2007-07-10  7:31       ` Jacques Garrigue
2007-07-10 14:16     ` Sam Steingold
2007-07-10 16:49     ` Sam Steingold
     [not found]     ` <46938BDA.1090605@podval.org>
2007-07-11  0:10       ` [Caml-list] " Jacques Garrigue
2007-07-11  1:19         ` Jon Harrop
2007-07-11  2:23           ` Jacques GARRIGUE [this message]
2007-07-11 13:12         ` Sam Steingold
2007-07-11 19:17           ` [Caml-list] " Jon Harrop
2007-07-10  3:34   ` [Caml-list] " skaller
2007-07-10 13:27     ` Sam Steingold

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=20070711.112307.2004150273.garrigue@math.nagoya-u.ac.jp \
    --to=garrigue@math.nagoya-u.ac.jp \
    --cc=caml-list@yquem.inria.fr \
    --cc=jon@ffconsultancy.com \
    /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).