Version française
Home     About     Download     Resources     Contact us    
Browse thread
[Caml-list] create a closure in external C function?
[ Home ] [ Index: by date | by threads ]
[ Search: ]

[ Message by date: previous | next ] [ Message in thread: previous | next ] [ Thread: previous | next ]
Date: -- (:)
From: Chris Hecker <checker@d...>
Subject: Re: [Caml-list] create a closure in external C function?

>> You can pass a closure to a C function and apply it to arguments
>> with the callback.h library pretty easily.
>It's not enough to convert a closure to a C function pointer.
>For example to wrap C's qsort() in this interface:
>    ('a -> 'a -> int) -> 'a array -> unit

Right, but it's part of the solution.  The plan is to make it so you can do that automatically.  On the C side, we'll use the ffcall trampoline/vacall interface to pass qsort the pointer to a function that calls back the caml function with the right parms.  It's gonna be beautiful (or go down in flames, one of the two :).  There are only a couple loose ends to tie up and I'm confident we'll be able to get it working in its full insane generality.

You'll still want to use an interface generator for any permanent functions you want to hook because this is going to generate a bunch of code to loop over arguments at runtime and whatnot, but for dynalinking to dlls (or doing stuff like OpenGL extensions) it'll rule.  Hopefully it'll only be 20% or so slower than a direct external function call.

It's not going to handle records or polymorphism at first, of course (or even passing or returning closures when I first write it).  I've got a plan for handling records, but I need to understand polymorphism more before I can think about that (in fact, I can't do any real work on this for a couple weeks, but I'm trying to lay the groundwork).

I'm also a little terrified of making this play nice with the GC, but we'll blow up that bridge when we come to it.

Chris


-------------------
To unsubscribe, mail caml-list-request@inria.fr.  Archives: http://caml.inria.fr