Getting back to this; sorry about the delay. Thanks for taking the time to write the detailed code examples. vector-shrink! and string-shrink! are also useful. I've explored the FFI some more. There are lots of C APIs that return a vector of some datatype that would be useful to bring over to Scheme. All of the following are useful: - collect N-bit integers into a buffer in C, possibly truncate, turn into a Scheme homogeneous numeric vector - collect N-bit integers into a buffer in C, possibly truncate, turn into a generic Scheme vector (i.e. the elements are converted from C integers into Scheme fixnums, some might become bignums instead) - collect char* string into a buffer in C, possibly truncate, turn into a Scheme string - collect WCHAR string into a buffer in C, possibly truncate, turn into a Scheme string When collecting C integers to be turned into fixnums later, would it make sense to pre-allocate a Scheme vector with space in its body for (* capacity (max size-of-that-c-integer-type size-of-a-scheme-value)) bytes? Then fill the buffer and do an in-place conversion from C integers to fixnums. If this works, we wouldn't have to allocate a separate vector for the fixnums.