[cffi-devel] Re: cffi/allegro crash
Hoehle, Joerg-Cyril
Joerg-Cyril.Hoehle at t-systems.com
Tue Dec 20 14:23:36 UTC 2005
Luis Oliveira writes:
>I think the behaviour here
>should be uniform since ideally users would test a set of CFFI
>bindings on one implementation and be confident that it would work on
>the other supported lisps.
We all agree on that. However, how do you expect to prevent a long-time Allegro user to inadvertently write 0 instead of (cffi:null-pointer)?
This is exactly the same with CLISP+Lispworks with NIL.
We don't have static typing in CL, or at least, not without a cost. Strong typing is all we have.
I suggest the solution is NOT to add (check-type x ...) but to leave the individual FFI's as is.
Allegro must have a reason to stick to integers, even though it's over 10 years that I criticized it the first time :-)
BTW, CFFI reinvented the pattern "normal+other-as-different(e.g.NIL)-type" with :string. See foreign-string-to-lisp etc. It's a nice pattern, indeed. Why fight it for :c-pointer, but accept it for :string?
But here, I'm not arguing in favour of a NULL->NIL conversion. I'm in favour of leaving the respective implementation's FFI as is, and not generate code for CLISP to turn NIL back into a pointer with a 0 address. I agree that I wouldn't argue with that much heat if this were not related to performance.
I believe that if somebody wanted a higher expectation for portability, then s/he might use a "debug converter", which would turn every pointer into a CLOS instance that CFFI would then somehow typecheck at run-time. Obviously, that should be a debug aid only, and not for general code.
Similarly, I have a uffi:def-foreign that'll do nothing but type-check at compile (macro expansion) time. I found several bugs in libraries using UFFI this way.
Regards,
Jörg Höhle.
More information about the cffi-devel
mailing list