guile-user
[Top][All Lists]
Advanced

[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



reply via email to

[Prev in Thread] Current Thread [Next in Thread]