On Wednesday, 18 February 2015 at 00:14:55 UTC, deadalnix wrote:
On Tuesday, 17 February 2015 at 19:03:49 UTC, Chris Williams wrote:
Every throwable function call could be assumed to have a typed result (even void functions) and if, after the return, the caller checks the type and detects that it was an error, bubbles that up, then eventually you get to wherever the catcher is.

But so basically, the current ABI doesn't support it and there's no desire to change it? How do exceptions currently happen, if not via some official ABI declaration of how throwable methods interact with one another? The compiler/linker determines where the catcher is and inserts code to cut down the stack and perform a long jump all the way back? If so, how do scope statements work?

This kind of stunt is taxing on the fast path. It can be implemented as setjmp/longjmp but is more and more avoided in favor of libunwind based solutions for languages that have code running on unwinding.

libunwind based solution is slower to unwind, but is not very taxing in the fast path (only prevent some optimizations to be done like tail call).

This solution is a non starter perforamnce-wize for D.

I didn't mean it as a solution. As said, I was just looking for an intro to the topic, so that I (and others) could meaningfully contribute or at least understand the options. I'll look up libunwind and, if that has enough info for me to grok it, create a wiki page on the subject.

Reply via email to