Use C++ exception model in D

Iain Buclaw ibuclaw at gdcproject.org
Tue Apr 8 15:19:37 PDT 2014


On 8 April 2014 21:06, Brad Roberts <braddr at puremagic.com> wrote:
> On 4/8/14, 12:56 PM, David Nadlinger wrote:
>>
>> On Tuesday, 8 April 2014 at 18:55:35 UTC, Brad Roberts wrote:
>>>
>>> I think, for a mixed language application, that the important part is
>>> proper object lifetime
>>> management more than being able to catch exceptions from different
>>> languages.  When unwinding a
>>> c++ exception that has stack frames intermixed with D, destructors need
>>> to be executed
>>> appropriately, and vice versa.
>>
>>
>> I haven't actually tried to do this, but in theory, this should be the
>> easy part with libunwind. You
>> just ignore foreign exceptions during the search phase (i.e. not catch
>> them), and during the unwind
>> phase, your own personality function is called again for cleanup
>> regardless of the handler the stack
>> actually unwinds to.
>>
>>> This is also an important part of having abi compatibility between D
>>> compilers, something which we
>>> don't have today but really must have eventually.. hopefully not years
>>> away.
>>
>>
>> This really depends on somebody familiar with the DMD backend committing
>> to going through with it. I
>> think both on the GDC and LDC sides, there is agreement that we need to
>> work on a common ABI.
>> However, the whole thing would be somewhat of a futile effort without DMD
>> on board as well.
>>
>> On x86_64, ABI compatibility is not an unreasonable goal at all (and a
>> very important one, in my
>> opinion). There are some areas that will need a lot of careful spec'ing
>> and likely entail changes in
>> all three compilers, such as the construction of nested scopes. However,
>> in some cases, e.g.
>> exception unwinding, or proper variadic arguments, it's definitely the
>> case that GDC and LDC would
>> be easy to align, whereas DMD would have to give up its own bespoke
>> solution. Does DMD still do
>> things like magically accessing the scope of the parent function in in/out
>> contract calls?
>>
>> David
>
>
> Most of the areas where DMD is 'odd' are a case of "I can't figure out the
> right way, so any way is better than no way".  That's particularly true for
> var args and eh.  I'm confident that pulls that fix these issues can and
> will be accepted.  I'm less confident that someone will volunteer to fix it,
> but it's something I care about.

Hopefully I've convinced Daniel to fix the va_args at least.


More information about the Digitalmars-d mailing list