<div dir="ltr">Hi all, I'm working on implementing exceptions in Pyston, and I was hoping to get some guidance from the list.  I think I've learned enough about C++-style DWARF exceptions to convince myself I have a workable approach, but then I found this VMKit paper (2010) which says<div>


<br><div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex">The exception manager: To manage exceptions, J3 reserves a<br>


word for the pending exception in the local storage of each thread.<br>After each method invocation, the word is tested. If an exception<br>has been raised and the function is able to trap the exception, a<br>branch to the exception handler is executed. Otherwise, the function<br>


returns to the caller. This implementation is not optimal because it<br>requires a test and branch after each method invocation. A more<br>efficient implementation would use exception tables. However, at<br>time of writing the paper, the exception tables generated by LLVM<br>


rely on the GCC runtime library [19] which is not optimized for<br>dynamically generated tables, at least on Linux.</blockquote></div><div><br></div><div>So now I'm reexamining whether C++-style exceptions are a good choice for Python, which I would guess throws more exceptions than Java.</div>

</div><div><br></div><div style>Does anyone have advice on the subject?  I'm wary of the costs of having to branch after every function call, but maybe that ends up not being too much of a performance drain if the CPU can predict them correctly?  But then again, it looks like VMKit has moved to a setjmp-longjmp approach, which makes me think that there must have been some overhead that they wanted to avoid.</div>

<div style><br></div><div style>I'm also curious about why libgcc is slow on dynamically generated tables, and if that's still true with MCJIT (I assume the VMKit change was made while on the old JIT).</div><div style>

<br></div><div style>thanks,</div><div style>kmod</div></div>