Am Wed, 09 Apr 2014 22:19:30 -0700 schrieb Brad Roberts <bra...@puremagic.com>:
> On 4/9/14, 9:49 PM, Etienne Cimon wrote: > > On 2014-04-10 00:01, Brad Roberts wrote: > >> And you aren't submitting a pull request with those changes because... > > > > Well, I was hoping for someone to catch on with the extern(C) = nothrow > > idea. Maybe this reallyy > > belongs in DMD! > > It shouldn't, because it's not 100% true, even for libc related functions. > Consider qsort and it's > function pointer parameter. There's other examples of the same. Just > because most are no through > doesn't imply they all are. Well, the intention was good. If I may add: Don't pass a D function that throws to C/C++ code on Linux/GNU x86_64. DMD's stack unwinder relies on how the D compiler writes stack frames. In particular it expects frame pointers, which aren't used by default on that arch. As a result druntime will terminate your application. > Leave the realm of libc and it's even less true. Consider all the C > wrappers for c++ libraries. It's perfectly legal for any of those to throw. Isn't that paradox? Why is it legal to throw C++ exceptions into a language that can't possibly look at them? Does that mean every language which interfaces with C handles C++ exceptions in some way? E.g. JNI, Python, ...? I mean, to be legal it has to be defined to do something specific, other than killing your program on the spot. -- Marco