[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
on coding a portable R6RS package supporting Guile and its FFI
From: |
Marco Maggi |
Subject: |
on coding a portable R6RS package supporting Guile and its FFI |
Date: |
Thu, 17 Jan 2013 11:53:33 +0100 |
Ciao,
in my latest package[1] I am using Guile 2.0.7 and its FFI
along with Mosh Scheme, Racket, Sagittarius Scheme, Vicare
Scheme, Ypsilon Scheme. I have the following observations:
* Guile does not come with the very simple SRFI 78:
lightweight testing. I had to include it[2][3].
* It appears that there is no facility to handle "output
arguments" from C functions; I mean the cases where a C
function accepts as argument a pointer to variable that
will be filled with some computed value. I am using a
WITH-LOCAL-STORAGE[4] macro which is maybe ugly, but
works.
Such arguments are common, and represent a nuisance to
handle. Racket has a sophisticated interface, complicated
to use when writing adapter code. Something simpler but
built in would be useful (this is the sort of thing a user
does not want to think about: it should be an already
solved problem).
* Whenever a callout to C accepts a pointer argument: a
bytevector argument is rejected. Is this not a useless
complication?
One can work around it by explicitly using
BYTEVECTOR->POINTER, so everything is ready in Guile. The
other Scheme implementations using a non-compacting
garbage collector already support this feature and I find
it truly convenient.
* There are no raw memory getters and setters[5]? The fact
that it is possible to create a wrapping bytevector is a
plus for sure, but I find it inconvenient to allocate a
bytevector when I do not need it (and raw getters and
setters are really small functions).
* The limit of 10 arguments for callouts to C is annoying.
It forced me to exclude some SOFA functions resulting in
amputated Guile support.
TIA
[1] <http://github.com/marcomaggi/r6rs-sofa/>
[2] <http://github.com/marcomaggi/r6rs-sofa/tree/master/lib/guile/srfi>
[3]
<http://github.com/marcomaggi/vicare/blob/devel/doc/srfi-lightweight-testing.texi>
[4]
<http://github.com/marcomaggi/r6rs-sofa/blob/master/lib/sofa/compat.guile.sls>
[5] <http://marcomaggi.github.com/docs/vicare.html/iklib-pointers.html>
--
Marco Maggi
- on coding a portable R6RS package supporting Guile and its FFI,
Marco Maggi <=