|
Boost : |
Subject: Re: [boost] expected/result/etc
From: Niall Douglas (s_sourceforge_at_[hidden])
Date: 2016-02-13 07:58:50
On 13 Feb 2016 at 10:26, Giovanni Piero Deretta wrote:
> > LLVM, for the record, has implemented a very similar "universal"
> > exception handling mechanism which allows exception throws to
> > traverse language boundaries within LLVM, and my great hope is that
> > once LLVM becomes universal on POSIX platforms someone will go ahead
> > and replace signals with structured exception handling.
>
> As far as I know LLVM simply implements unwinding as mandates by the
> Itanium ABI, which is already the de facto standard on many unices. Is this
> what you are referring to?
LLVM provides a general purpose compile time and a second runtime
library which allows (live) manipulation of exceptional behaviour.
You can add stuff to be called on stack unwind according to a simple
programmable logic, and intercept unwinds to perform simple logic to
decide what to do next.
In other words, exactly what win32 structured exception handling
does.
clang extends that infrastructure with the extra goodies needed to
implement C++ exception semantics, and mostly focuses on the compile
time graph building for obvious reasons. Exactly the same way MSVC in
the past extended win32 structured exception handling to implement
C++ exception semantics (to my knowledge, recent MSVCs no longer do
this by default mainly because win32 structured exception handling is
quite slow and extremely non-optimisable due to being runtime
modifiable).
The last time I looked at that internal library was 2013 or so, but I
do remember being surprised at a number of substantial differences in
the implementation compared to win32's. The deviations were
sufficient that reusing that infrastructure to implement win32
structured exception handling support would be very tricky, and I
suspect much of the work making winclang since has been refactoring
this very core library.
But I haven't looked since 2013, anything could have happened since.
And memory can be faulty, so any of the above may be lies.
Niall
-- ned Productions Limited Consulting http://www.nedproductions.biz/ http://ie.linkedin.com/in/nialldouglas/
Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk