Matthew Fluet fluet@cs.cornell.edu
Fri, 2 Jul 2004 16:34:18 -0400 (EDT)

> Regarding _dimport, would it be possible to think of _dimport as the
> primitive and implement _import in terms of _dimport by adding another
> primitive like _symbol?  So,

I don't necessarily think it is a good idea.  If

   _symbol "f" : Word32.word (* MLton.Pointer.t *)


     e : Word32.word
   (_import e : t) : t

Then it seems to me that the codegen will end up doing:

   (_dimport (_symbol "f"): int -> unit;) 1


   movl f,%eax
   pushl 1
   call (%eax)

And, I think that is bad for the processor, because calls are nicer when
they are PC relative addresses.

Arguably, it's just something for the processor to clean up after.  But, I
think that calling a static name and calling a dynamic value are fairly

> For now, I'd like to keep the mlb files more focused on being in the
> clean SML world and having a clean semantics.  To solve the above
> problem, it seems better to me to adopt some convention or let our
> users figure one out, like including a top-level Makefile in each
> distributed library that has a phony "mlton-compile-options" target
> that prints out the needed options.  Yeah, it's not so composable or
> clean, but that may be a more accurate reflection of the real world
> than putting annotations in mlbs.

O.k.  I wasn't overly excited about it.