This is the mail archive of the guile@cygnus.com mailing list for the guile project.
| Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
|---|---|---|
| Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |
>>>>> "Mikael" == Mikael Djurfeldt <mdj@nada.kth.se> writes:
Mikael> Include a "handle" pointing back to the Scheme level
Mikael> object in every C struct. This way, C level objects can
Mikael> refer to each other directly by C pointers, but the
Mikael> garbage collector can still find the corresponding Scheme
Mikael> level wrapper objects (the smobs):
And to give complete guile independence for the poor saps who want it,
you could go so far as to:
struct foo {
#ifdef HAVE_GUILE
SCM handle;
#endif
...
struct bar *bar;
...
};
struct bar {
#ifdef HAVE_GUILE
SCM handle;
#endif
...
};
As Marius pointed out, reference counting can have some problems if
there is the possibility of circular reference loops, and in the
particular application that I'm thinking about (sewn parametric
surfaces) circular references are almost unavoidable. So the design
suggested by Mikael above is quite compelling.
Daniel