[cffi-devel] Re: first clisp-specific patch: copyright, callbacks & spam
Hoehle, Joerg-Cyril
Joerg-Cyril.Hoehle at t-systems.com
Thu Dec 22 12:36:18 UTC 2005
Luís Oliveira wrote:
>> ffi:memory-as is a perfect match for %mem-ref
>Sure, sure. We would have used it if it were documented. ;-)
You didn't read the documentation recently, did you?
>darcs diff will produce a short patch.
Ah, I used darcs send -uo file.patch instead
>It'd be nice if cffi-devel wasn't moderated at all, but I suppose
>it would get a lot of spam?
I have no experience here, but IIRC Kevin Rosenberg or Marco Baringer have very strong opinions on the "subscribe first". I'd just appreciate if the mailing-list descriptions on common-lisp.net would mention that requirement.
>However I suppose cffi-clisp's %defcallback should free the previous
>callback with the same name (maybe this is what you're thinking
>about).
No, I did not mean that.
> Something like this?
>+ (let ((cb-fun (get ',name 'clisp-callback-function)))
>+ (when cb-fun (ffi:foreign-free cb-fun)))
>+ (setf (get ',name 'clisp-callback-function) ,cb-var)
The comments specifically meant that this would not work, because
(foreign-free #.#<FOREIGN-ADDRESS>) -> free(), which is not appropriate,
while
(foreign-free #.#<FOREIGN-FUNCTION>) lets clisp recognize and free the function.
Cffi currently stores (foreign-address #<foreign-function>) in the plist, thus it cannot free the thing anymore.
I haven't investigated what implications storing the #<FOREIGN-FUNCTION> object instead of its address would have on cffi invariants.
Another possibility would be to attach a finalizer. But given that cffi callbacks are static only (and thus probably not numerous), I wouldn't bother the GC. There are other situations which create callbacks on the fly, without easy means to free them. For example, each time you pass a Lisp function to a foreign one with type (c-function ...): the Lisp side typically does not see pointer to the callback that gets created.
>Btw, I have a question about CLISP's licensing.
>My question is: does this mean CFFI (the whole CFFI?) would have to
>be licensed under the GPL?
I'm no lawyer either. the question arises from time to time and was even discussed not too long ago for UFFI (in clisp-list or clisp-devel).
My understanding was that there's no problem, as the goal is to provide functionality also available in a great number of Common Lisp implementations.
>If so, could these symbols CFFI uses be exported?
I'm looking into that.
Regards,
Jörg Höhle.
More information about the cffi-devel
mailing list