Calypso and the future of D

Jacob Carlborg via Digitalmars-d digitalmars-d at puremagic.com
Fri Jan 23 12:19:57 PST 2015


On 2015-01-23 19:43, Andrei Alexandrescu wrote:

> On that front, a coworker gave me a simple idea for integration.
>
> 1. All C++ non-polymorphic types thrown cannot be caught in D
>
> 2. We (or Calypso) define D class counterparts for polymorphic types
> thrown from C++, notably std::exception and subtypes. N.B. those are D
> classes, not D structs
>
> 3. D code can catch std::exception. The only caveat is that the caught
> exception cannot survive the catch statement. Given that calling into
> C++ is not the paramount of safety in the first place, I'd say that's a
> reasonable compromise.
>
> Example:
>
> ----
> import core.stdcpp.vector;
> import core.stdcpp.exception;
>
> core.stdcpp.exception g;
>
> void fun(core.stdcpp.vector!int v)
> {
>      try
>      {
>          v.push_back(42);
>      }
>      catch (core.stdcpp.exception e) // fine, can catch
>      {
>          g = e; // ouch, will dangle
>      }
> }
> ----
>
> Thoughts?

Even with these restrictions C++ exceptions are quite complicated. I've 
probably said this before but in 64bit Objective-C (which uses the same 
exception model as C++) you can only catch C++ exceptions with the 
catch-all block which won't let you access the actual exception:

@try {
     v.push_back(42);
}
@catch (...) { }

Not sure if that makes it particular easier to implement.

-- 
/Jacob Carlborg


More information about the Digitalmars-d mailing list