From: "Basile Starynkevitch [local]" <basile.starynkevitch@inria.fr>
To: skaller <caml-list@inria.fr>
Subject: Re: [Caml-list] Why must types be always defined at the top level?
Date: Fri, 25 Jun 2004 13:07:48 +0200 [thread overview]
Message-ID: <20040625110748.GB2707@bourg.inria.fr> (raw)
In-Reply-To: <1088158825.1941.113.camel@pelican.wigram>
On Fri, Jun 25, 2004 at 08:20:26PM +1000, skaller wrote:
> On Fri, 2004-06-25 at 05:46, John Hughes wrote:
> > Thanks for the answers.
> > > > 1. Why no eqtypes?
> > >
> > > Eqtypes have been hotly debated even among the SML designers.
> Hmm .. but interesting Ocaml has a slot to marshal abstract types
> .. and to finalise them .. but not to compare them. Bignums in
> particular don't work with polymorphic compare or hash, which means
> you can't for example use them as keys to a hashtable .. as I just
> discovered again :(
(there is no slot in custom data to support Ocaml values inside them
neither)
> Any thoughts on a way to fix that?
> My hashtable keys are terms which might contain integers which
> happen to be represented by big ints, so just using a custom
> hashtable won't work.
The latest Ocaml CVS has probably some "better" bignums - but I don't
know the details.
> In this case, I'd be more than happy to just hash the term's address
> (this would be heaps faster than the recursive polymorphic
> comparison)
This certainly won't work: addresses (even of opaque types) may move,
because on some occasions (minor GC, compactions) the Ocaml runtime
system (actually the garbage collector part) moves Ocaml values, so
their addresses is changed. To grant your wish (which I actually share
with you) would require to add into the runtime system some kind of
new tag for associative tables, and in several parts of the GC (those
scanning, copying or moving values) additional code to handle it.
IMHO hashtables of (polymorphic) mutable values don't work, even when
using physical identity (==) as the equality test, because their
hashes (which is not based upon the address) changes with tehir
content.
Probably encapsulating such values (or just your bignums) inside
object should work, since objects have immutable identities and
hashcodes.
> Is there a way to use an address as a comparable
> but otherwise opaque value?
No, see above. But try to encapsulate them in objects (at least for
the hash table) might help. Of course, you might need to "hash-cons"
or cache the containing object...
--
Basile STARYNKEVITCH -- basile dot starynkevitch at inria dot fr
Project cristal.inria.fr - (temporarily)
http://cristal.inria.fr/~starynke --- all opinions are only mine
-------------------
To unsubscribe, mail caml-list-request@inria.fr Archives: http://caml.inria.fr
Bug reports: http://caml.inria.fr/bin/caml-bugs FAQ: http://caml.inria.fr/FAQ/
Beginner's list: http://groups.yahoo.com/group/ocaml_beginners
next prev parent reply other threads:[~2004-06-25 11:08 UTC|newest]
Thread overview: 37+ messages / expand[flat|nested] mbox.gz Atom feed top
2004-06-22 22:41 Richard Jones
2004-06-22 22:53 ` Markus Mottl
2004-06-22 23:32 ` skaller
2004-06-23 12:01 ` Andreas Rossberg
2004-06-23 14:45 ` skaller
2004-06-23 16:28 ` Andreas Rossberg
2004-06-23 20:21 ` skaller
2004-06-23 20:52 ` skaller
2004-06-24 14:27 ` John Hughes
2004-06-24 16:47 ` Andreas Rossberg
2004-06-24 17:30 ` Markus Mottl
2004-06-24 17:45 ` Xavier Leroy
2004-06-24 19:46 ` John Hughes
2004-06-24 19:56 ` David Brown
2004-06-24 19:57 ` William D. Neumann
2004-06-24 20:13 ` Olivier Andrieu
2004-06-24 23:26 ` Brian Hurt
2004-06-25 10:20 ` skaller
2004-06-25 11:07 ` Basile Starynkevitch [local] [this message]
2004-06-25 12:30 ` skaller
2004-06-25 14:38 ` [Caml-list] Thread and kernel 2.6 pb still there in CVS Christophe Raffalli
2004-06-25 16:08 ` [Caml-list] " Marco Maggesi
2004-06-25 16:32 ` Markus Mottl
2004-06-28 15:08 ` [Caml-list] " Xavier Leroy
2004-06-28 18:50 ` Benjamin Geer
2004-06-29 2:26 ` Christophe Raffalli
[not found] ` <7AFB5F64-C944-11D8-975C-00039310CAE8@inria.fr>
[not found] ` <40E11621.3050709@univ-savoie.fr>
2004-07-05 15:14 ` Christophe Raffalli
2004-07-05 16:34 ` Xavier Leroy
2004-07-06 9:33 ` Alex Baretta
2004-07-08 13:51 ` Christophe Raffalli
2004-07-08 15:03 ` Xavier Leroy
2004-07-09 23:21 ` Donald Wakefield
2004-07-10 10:56 ` Damien Doligez
2004-06-24 23:23 ` [Caml-list] Why must types be always defined at the top level? Brian Hurt
[not found] ` <Pine.LNX.4.44.0406241813370.4202-100000@localhost.localdom ain>
2004-06-26 23:08 ` Dave Berry
2004-06-25 1:59 ` Yaron Minsky
2004-06-24 23:08 ` Brian Hurt
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=20040625110748.GB2707@bourg.inria.fr \
--to=basile.starynkevitch@inria.fr \
--cc=caml-list@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).