On Tuesday, 17 February 2015 at 18:04:53 UTC, Matthias Bentrup
wrote:
If the unwinding is done after the exception handler is left,
the thrower can safely reference the data directly on the stack
and the catcher can ignore any data it doesn't need. (It may
copy the data to safety if it is needed later, but the catcher
knows what it needs, whereas the thrower has to always assume
the worst case.)
That is a good idea, unfortunately this is impossible since the
catch block needs to execute code. But this is a good thought
process. I thought of the same thing but then realized that it
would be impossible to ensure that the catch block wouldn't stomp
on that memory. This leads to having a second stack...however,
we already have a solution...it's called the heap :) By the time
you're done trying to resolve this issue you will have just
redesigned the heap.
IMO, Allocating the exception on the non-gc heap and making the
catch block responsible for freeing the memory is a pretty good
solution.