On Friday, 18 August 2017 at 03:31:38 UTC, Walter Bright wrote:
Chained exceptions are a good idea, but are more or less a
disaster:
1. No other language does chained exceptions
2. Attempting to hammer D chained exceptions into other
language schemes (such as C++) makes for lots of unfun hours
attempting to decode undocumented behavior in those other
schemes
3. Makes D exceptions incompatible with other language
exceptions and their infrastructure
4. Are incomprehensibly implemented (I defy anyone to explain
how the test cases in the test suite are actually supposed to
work)
Well, I wrote them, so I can explain that. The problem is that
the idea that you can form a "chain" of exceptions turns out to
be naive.
What if a chained exception needs to get chained to another
chained exception? And that then needs to be chained to another
exception?
It forms a tree! That's why the test cases are so complicated.
So to a large extent, this extremely obscure corner case destroys
the elegance of the concept.
Secondly, exception handling in windows is practically
undocumented. Certainly it's not documented in a single place.
When I began to implement it, I feared it might be impossible.
There isn't any guarantee that exception chaining can actually be
implemented on all platforms.
5. Are more or less incompatible with non-GC memory allocation
I'd like to remove them from D.
I recommend *not* designing any program that requires them.
I invested quite a lot personally in implementing chained
exceptions. But I agree with you.
I was actually quite proud that I worked out the nasty corner
cases during the initial implementation. As far as I can tell,
problems with chained exceptions are not because of bugs and
implementation issues, but because of problems with the concept
itself.
I think it's just a bit too clever.