[gambit-list] Returning nested data structures from C to Scheme

Lassi Kortela lassi at lassi.io
Sat Aug 31 05:15:02 EDT 2019

Didn't find a guide to this in the wiki, mailing list archives, gambit.h 
comments or the examples directory that comes with Gambit. How do you 
build a Scheme list, vector, etc. in C and then return it to Scheme?

As a simple exercise to learn the FFI, I started by wrapping Unix 
uname(). That function fills a struct with a few null-terminated 
strings. It was easy to figure out how to return an individual string 
from C to Scheme but I'm stumped trying to return many of them at once 
in a list or a vector (or as multiple values).

I imagine this is done by calling the C constructors for the desired 
Scheme data types but I couldn't find those in <gambit.h>. There's 
___BEGIN_ALLOC_VECTOR and ___END_ALLOC_VECTOR but I couldn't get those 
to work. Also ___make_vector but it takes some kind of 
___processor_state argument. That and the lowercase name make it seem 
like an internal function that I shouldn't use.

If someone has the time to write a brief guide on constructing and 
returning lists/vectors/multiple values in C, it could be useful to 
others as well.

More information about the Gambit-list mailing list