How would this work if I wanted to not run Guile embedded in a C++
program, but instead load the C++ code at runtime from a regular Guile
interpreter? (This could use either the libffi binding or the regular
Guile ones.)
Since Guile is written in C, formally according to the C++ standard, you can
only load Guile from C++ code, and not the opposite. So main() must be C++.
GCC though has integrated C and C++ fully, it seems. So you can call C++ from
C code, but the latter do not implement C++ exception stacks, and may not
call C++ initialization function properly (I haven't checked). It means that
throwing and catching exceptions within C++ functions called from C seems to
work fine, but if one tries to pass it through a C function, the program will
throw a terminate exception.
Hi,
FWIW, I've used guile with C++ both ways: calling the main REPL
loop in libguile from a C++ main, and also by creating loadable modules in
C++, and calling load-extension with an initialization function. Both
work just fine, but you should be aware that guile errors do not unwind
the stack on error, so C++ stack objects do not get destroyed in the event
of exceptions/errors in the guile library. I usually write the
initialization function in the extern "C" namespace to avoid symbol name
mangilng.
Also, global statics in C++ modules are initialized upon
loading, from what I've seen.
Fang
David Fang
http://www.csl.cornell.edu/~fang/
http://www.achronix.com/