[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: Dynamic loading progress
From: |
Daniel Colascione |
Subject: |
Re: Dynamic loading progress |
Date: |
Sun, 13 Sep 2015 20:54:26 -0700 |
User-agent: |
Mozilla/5.0 (X11; Linux x86_64; rv:38.0) Gecko/20100101 Thunderbird/38.2.0 |
On 09/13/2015 08:43 PM, Stephen J. Turnbull wrote:
> Daniel Colascione writes:
> > On 09/13/2015 01:31 PM, Stefan Monnier wrote:
>
> > >> It's not possible to skip frames in module code using longjmp, so
> > >
> > > Why not?
> >
> > Because most C code isn't expecting to be unwound. Forcing non-local
> > flow control on module code is completely unacceptable.
>
> "Completely unacceptable" is nonsense. Module code needs to be
> written the same way any other Emacs code is written, using various
> unwind-protect constructs.
Why? There is no positive reason to make Emacs module code resemble
Emacs core code. In fact, there's a strong reason to make Emacs module
code more conventional, because it'll improve the accessibility of the
API, which in turn will increase the quantity and quality of Emacs modules.
The Emacs core code has a lot of baggage. It's not practical to clean it
up today, but the module system is a greenfield project. There is no
reason to burden it the same way.
> If the module wraps external code that
> has state that persists past the unwinding, you also need to use the
> underlying code's own "unwind protection".
We shouldn't break this perfectly reasonable code:
void
foo()
{
std::string x = something();
emacs_bar(x.c_str());
}
longjmp()ing out of emacs_bar prevents any stack unwinding happening,
which means that any code that requires stack unwinding for correctness
needs to swap every Emacs API call in the equivalent of condition-case.
It's cumbersome, especially for any binding that isn't pure C.
Can you name an extension system for any other program that longjmps out
of its public API functions?
signature.asc
Description: OpenPGP digital signature
- Re: Dynamic loading progress, (continued)
- Re: Dynamic loading progress, David Kastrup, 2015/09/15
- Re: Dynamic loading progress, Daniel Colascione, 2015/09/15
- Re: Dynamic loading progress, David Kastrup, 2015/09/15
- Re: Dynamic loading progress, Daniel Colascione, 2015/09/15
- Re: Dynamic loading progress, David Kastrup, 2015/09/15
- Re: Dynamic loading progress, Stephen J. Turnbull, 2015/09/15
- Re: Dynamic loading progress, Michael Albinus, 2015/09/15
- Re: Dynamic loading progress, Philipp Stephani, 2015/09/29
- Re: Dynamic loading progress, Stefan Monnier, 2015/09/29
- Re: Dynamic loading progress, Stephen J. Turnbull, 2015/09/13
- Re: Dynamic loading progress,
Daniel Colascione <=
- Re: Dynamic loading progress, Stefan Monnier, 2015/09/14
- Re: Dynamic loading progress, Philipp Stephani, 2015/09/29
- Re: Dynamic loading progress, Stefan Monnier, 2015/09/29
- Re: Dynamic loading progress, Stephen J. Turnbull, 2015/09/14
- Re: Dynamic loading progress, Stephen Leake, 2015/09/14
- Re: Dynamic loading progress, Stephen J. Turnbull, 2015/09/14
- Re: Dynamic loading progress, Philipp Stephani, 2015/09/29
- Re: Dynamic loading progress, Stephen J. Turnbull, 2015/09/29
Re: Dynamic loading progress, Philipp Stephani, 2015/09/13