[MLton] ffi improvements
Daniel C. Wang
danwang@CS.Princeton.EDU
Wed, 22 Sep 2004 20:48:47 -0400
I don't think it causes any problems per-se, I just don't like not having as
much type checking as what is avalible in the C prototypes.
Consider..
char *f(void);
void g(int *p);
The MLton native wrappers would have the type
val f: unit -> MLTon.Pointer.t
val g: MLTon.Pointer.t -> unit
So I could do the following with the MLTon wraper functions
g(f())
which the C compiler would have prevented me from doing. The MLTon FFI is
forcing me to throw away info that's in the C code.
Also, it seem using the MLTon.Pointer structure I can do the following
val p = ... (* word alligned pointer)*
MLton.Pointer.getWord32(MLTon.Pointer.add(p,0w1));
which I suspect will cause an unaligned access error on many RISC platforms.
I suspect what I want is a slightly more refined interface for the user. I
don't see any problem having a Pointer type in the compiler, but I would
expect more type-checking in the exposed user interfaces.
Stephen Weeks wrote:
>>BTW what's the story with enforcing alignment restrictions. It's
>>not the case that the C types char* and int* are semanticlly the
>>same because of potential alignement constraints, but the MLton FFI
>>maps them to the same Pointer.t which I think is wrong.
>
>
> Can you explain how this prevents writing a certain program or causes
> other problems?