Communication between different C extensions

Hello !

A long time ago, I was bitten hard by interoperability between
different C extensions that need to access each others internals. As at
that moment I was controlling the source code of all extensions, I got
away with a (simple ?) workaround.

Now is time for me to get bitten again. I’m currently writing a Ruby
wrapper for a C++ library providing simple symbolic calculus (and
evaluation). The extensions provides functions to apply a formula to a
great number of numbers, a bit like the following:

apply(“x + y”, ‘x’ => [1,2], ‘y’ => [3,4])
=> [4,6]

I want to be able to interface that with the common libraries for
manipulating data (Narray, ruby-gsl and Dobjects, a library used by
Tioga). However, I’m not aware of any way to do this ‘cleanly’. Sure, I
can hack the data structures from the headers of these extensions, but
that means breaking binary compatibility everytime a header changes -
not very much something I like.

Is there a better way to do so ? Going through Ruby arrays isn’t an
option for speed issues (very expensive to convert a double * to a VALUE
array and back to double *…). Any ideas ?