Unification, comparison

Raphael Collet raph at info.ucl.ac.be
Wed Jan 4 21:34:06 CET 2006


David Hopwood wrote:
> Hmm. I believe the following optimization is worth considering: when two
> variables are either bound together or successfully tested for structural
> equality, set both to point to the structure with the lower address.
> 
> (Note that this only incurs extra overhead in the slow path where the
> full unification or structural equality algorithms are needed, not in the
> fast paths where they either already have the same address, or one was
> unbound.)

Your suggestion implies that the memory representation of a record could 
be turned into an indirection to another representation of the same 
record.  This makes the traversal of data quite complex, and makes the 
memory representation quite error-prone.  Currently only a variable can 
become an indirection to something else.

In most programs, something like 99% of unifications are simple variable 
bindings.  Very few actually require recursive unification.  Your idea 
implies an overhead on *every* operation, even if you don't use the full 
power of unification!  The current implementation provides a better 
tradeoff for most cases.

> The main advantage is for memory usage -- it tends to reduce the number of
> copies of identical structures, as the ones that are no longer referenced
> are garbage collected. I don't remember where I first heard about this idea
> (maybe on the C2 wiki?), but some Lisp implementations used it, I think.

I am not sure this is worth the effort.  My experience tells me that 
this kind of tricks potentially brings more problems than solutions.

> Is System.eq supposed to be guaranteed to distinguish between structurally
> equal values that have been bound together? If so then this would prevent
> the above optimization -- but perhaps its specification is too strong in
> that case.

Yes.  System.eq just tests whether its arguments, which actually are 
memory references, are identical.  It does not take into account 
structual equality.

Cheers,
raph




More information about the mozart-users mailing list