On Saturday, 8 February 2014 at 16:50:53 UTC, Andrei Alexandrescu wrote:
On 2/8/14, 3:02 AM, Jakob Ovrum wrote:
On Saturday, 8 February 2014 at 00:49:46 UTC, Andrei Alexandrescu wrote:
One simple idea is to statically allocate the same exception and rethrow it over and over. After all there's no guarantee a distinct exception is thrown every time, and the approach is still memory safe (though it might surprise the programmer who saves a reference to an
old exception).

Andrei

I don't think it's that simple. What happens if an XException causes
another XException and they need to be chained together?

The chaining method detects that and .dup's one of them.

Andrei

What if the statically allocated XException is escaped to be inspected later, but before that is thrown again in a separate exception chain?

I suppose it would be no different from the current situation, as it's legal to throw exceptions allocated in any fashion, so there is already no guarantee of uniqueness. It's probable that some code out there still takes exception uniqueness for granted, so changing the allocation scheme would be a (typically silent) breaking change, even if the code is arguably broken in the first place. I suppose we could make that breakage a compile error by making exceptions implicitly `scope` at the catch-site, but that would of course be a much more involved change...

Personally I still like the idea, but if implemented, I think something should be done about the change in uniqueness at the same time, even if it's just an added note in the language documentation on exceptions.

Reply via email to