[MLton] Callback to function pointer?

Henry Cejtin henry.cejtin@sbcglobal.net
Thu, 14 Jul 2005 13:26:24 -0500


You  have  to  be  careful  about  this:  not all C values are like refs.  Or
perhaps it is just that the C type isn't quite what people tend to  think  it
is.  If I have an array
    extern int      z[10];
then  the  symbol  z  is a contstant (not a ref) pointer to integers.  On the
other hand,
    extern int      *z;
means that z is a ref pointer to integers.  (All of this  was  really  nicely
handled in Algol-68.)

As to why you would want
    _address "symbol";
to  return  types other than MLton.Pointer.t, I would use this because I want
opaque types here (sometimes).

I don't like the idea that _import would do a fetch immediately for non-arrow
types  but  delay  it  to  the  call  for  arrow  types (if I understood that
correctly).

Given that there is no way to make the read/write be a ref in ML (because the
code  for  !  and  := depend on the ML layout), I think that encoding them as
functions is correct.  This isn't needed in the case at the start  where  the
linker  symbol  really  is a constant, but only in that case.  You could only
tell that you are in this case if you let (required) the C type to carry that
information by having the type be (using C cast notation)
    (int [10])
vs.
    (int *)
and  that  would  have to be parsed by MLton.  I don't think that it is worth
it.