[MLton] Documentation on _export

Jens Axel Søgaard jensaxel@soegaard.net
Fri, 23 Sep 2005 16:08:41 +0200


Matthew Fluet wrote:
 > Jens Axel Søgard wrote
>>  _export "C function name" attr... : cFuncTy -> unit;
>>
>>  Denotes a function that must be applied to a SML function f and
>>  arranges for the exported C function to call the SML function.

>> This suggests that the export happens when the denoted function
>> is called, in other words that the export happends at runtime.
>> That can't be right? What would an improved wording look like?

> I think the wording is correct.  _export "foo"  ensures that there is a 
> symbol "foo" which may be called as a C function.  However, calling the 
> exported function before applying the "cFuncTy -> unit" denoted function 
> to an SML function will result in an exception at runtime claiming that 
> the exported function hasn't yet been initialized.

I see. The explicit explanation is thus:

   _export "Cfunc" attr... : cFuncTy -> unit;

   Exports a C function with the name "Cfunc" that can be used
   to call an ML function of the type cFuncTy.
   Before Cfunc is called from C, the function denoted by
       _export "Cfunc" attr... : cFuncTy -> unit;
   must be called with an SML function f whose (unfolded) type
   is cFuncTy.

Is it possible to call the function denoted _export ...
twice and thus use the exported Cfunc to call different
functions at different times?

-- 
Jens Axel Søgaard