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.

Reply via email to