Last week I committed into SVN the last major piece of some changes I've
been making to the modules implementation. There are a lot of detailed
changes but this last bit involves a change to way structures and
functors are implemented. Previously, whenever a signature was used it
was completely copied so that the types used in the values were distinct
from those in any other use of the signature. I've now changed this so
that the signatures are now carried around in their original forms and
the type information is carried in a map that only gets applied as late
as possible.
The effect of this change is that the memory required for a named
signature is allocated once and that using it, either to name a
sub-structure in another signature, or as an explicit signature
constraint for a structure or functor, incurs only a small additional
overhead.
Whether it makes any difference to your code will depend on the extent
to which you reuse signatures. It does seem to make a difference to the
size of the compiler although other changes have rather swamped it. An
extreme example was Lucas' Quantomatic which reduced in size from
150Mbytes to 13Mbytes!
David.
_______________________________________________
polyml mailing list
[email protected]
http://lists.inf.ed.ac.uk/mailman/listinfo/polyml