guile-user
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: concerns when integrating C++ code into guile?


From: Chris Vine
Subject: Re: concerns when integrating C++ code into guile?
Date: Thu, 8 Jan 2015 00:18:38 +0000

On Wed, 7 Jan 2015 23:15:07 +0100
Hans Aberg <address@hidden> wrote:
> 
> > On 7 Jan 2015, at 21:24, Ludovic Courtès <address@hidden> wrote:
> > 
> > If Scheme code calls C++ code that throws an exception, then the
> > stack will be unwound by libstdc++ and Guile’s ‘dynamic-wind’
> > handlers and such will not run.  
> 
> If one tries to pass a C++ exception through Guile code, it will not
> catch in C++ code above it, I think.
> 
> > That’s probably the main difficulty.
> 
> There is a gcc option, but someone said it does not work well,
> perhaps because any intermediate library and package functions must
> be recompiled as well.

It may or may not work well with respect to unwinding the stack, but
that misses one half of the point. It won't cause dynwind handlers to
run, whatever recompilation you do.

> Another variation might be compile C as C++, i.e. writing Guile in
> the common C/C++ subset. The Bison skeleton file had that before
> making a genuine C++ one, though it proved too difficult to maintain,
> and in addition, one does not get access to C++ features.
> 
> > Likewise when C++ code calls Scheme code.
> 
> For this, I made a smob and convert Guile errors to a C++ exception.
> Might be an overhead problem, though.

It is not just a matter of converting guile exceptions to C++
exceptions.  The issue is that guile propagates its exceptions via long
jumps up the stack, or the equivalent thereof. These will not run
non-trivial destructors for C++ objects taken out of scope by the jump
(and according to the C++ standard, it causes undefined behaviour).
This means that any exception handling has to be localized.

That is not impossible.  There is not that much libguile code needed to
run scheme extension code in a C++ program, if that is what you want to
do.

Chris



reply via email to

[Prev in Thread] Current Thread [Next in Thread]