Browse thread
Re: Structure sharing
- Xavier Leroy
[
Home
]
[ Index:
by date
|
by threads
]
[ Message by date: previous | next ] [ Message in thread: previous | next ] [ Thread: previous | next ]
[ Message by date: previous | next ] [ Message in thread: previous | next ] [ Thread: previous | next ]
| Date: | -- (:) |
| From: | Xavier Leroy <xavier@T...> |
| Subject: | Re: Structure sharing |
To complement Pierre's answer: > But [hash-consing] might make it much more usable on really small > systems, which is consonant with the CAML Light ideology. Generally speaking, the design of Caml Light goes a long way to get compact code, but does not try very hard to represent data compactly. For instance, cons cells are 3 words instead of 2. In practice, the only system where more compact data representations would make a big difference is the 8086 PC, with its 640k limit; as soon as, say, 2M are available (which is the case on all Macintoshes and PCs nowadays), the current representations seems to be unproblematic. > Alternatively, how well would it work if I used the "hashtbl" library > and did everything myself for the datatypes I'm interested in? Am I > making things non GC-able by putting them in a hash table? Yes. By programming directly in C and using special features of the current garbage collector (finalized objects and the fact that objects allocated in the old generation are never relocated), you could get a more efficient implementation of hash-consing that does not prevent garbage collection. That's definitely non-trivial. > How do the hash tables in "hashtbl" work exactly? The only bit of magic is the hashing primitive, which walks the data structure representing any Caml Light value (in the same way as generic structural equality) and computes a hash value based on the nodes encountered. Apart from this, it's standard dynamic hashing. - Xavier Leroy