It's a while since I looked at this but I'm fairly sure that if you provide a signature that Poly/ML will recheck the structure against the signature. It may be possible to avoid this in specific situations but there are a lot of cases where things get complicated. For example, the signature name FOO may be rebound or there may be sharing constraints if FOO is actually used within another signature. Opaque signatures are more complicated since
structure X :> FOO = Foo;
results in new type names being created for all the bound type names in FOO. Similarly, when matching an actual functor argument against a formal argument the compiler needs to create a map for the type names so that the correct types are generated for the result structure.

I guess it may be possible to avoid looking at the value environment in these cases and since that's usually much bigger than the type environment there would be some saving. There would need to be a unique ID for a signature to pick up the case of the signature name being rebound.

David

On 27/06/2011 17:26, Aleks Kissinger wrote:
Why are repeated signature ascriptions slow? Suppose Foo is a pretty
big structure, which has already been ascribed the signature FOO:

structure X = Foo; (* fast, note that poly already knows Foo, and thus X, is a 
FOO *)
structure X : FOO
structure X = Foo : FOO (* slow *)
structure X : FOO
structure X : FOO = Foo (* slow *)
structure X : FOO

Poly already knows that Foo is a FOO, so surely this should return
instantly, but it acts like its typechecking the whole struct again.
While it's not necessary to do the ascriptions above (poly is smart
enough to figure out X is a FOO, even in the first case), this same
issue seems to be seriously slowing down functor evaluation, where you
can't avoid ascription.

I thought using opaque ascription might skirt the issue, but the same
thing happens. Is poly just being silly, or this this a consequence of
how the type system works?

a
_______________________________________________
polyml mailing list
polyml@inf.ed.ac.uk
http://lists.inf.ed.ac.uk/mailman/listinfo/polyml
_______________________________________________
polyml mailing list
polyml@inf.ed.ac.uk
http://lists.inf.ed.ac.uk/mailman/listinfo/polyml

Reply via email to