On Saturday, September 29, 2012 06:41:01 Nick Sabalausky wrote: > On Fri, 28 Sep 2012 18:20:12 -0700 > > Brad Roberts <bra...@slice-2.puremagic.com> wrote: > > On Fri, 28 Sep 2012, Walter Bright wrote: > > > True, but I would never write code that tried to throw an exception > > > across language boundaries, anyway. It's just asking for trouble. > > > > And that's fine for your code, but if you want D and DMD to be a > > system that people use for larger systems, then cutting down the > > sheer number of things that don't work when pushed is kinda important. > > Especially since one of D's big selling points is linking with C/C++ > code. > > If such linking causes trouble with exceptions then people are > going to think twice about trying it (which reduces a major inroad for > D), or discover by surprise that it doesn't work and get > frustrated/annoyed.
It's a problem that I've run into at work between C++ and the C# interop layer for one of our programs. A .NET bug with regards to C++ exceptions being thrown from C++ code resulted in destructors not being run when they were caught in the managed C++ code (and that's the _managed C++_, not even C#). Mutexes weren't being unlocked as a result, and it wasn't pretty. Making sure that exceptions didn't escape the normal C++ code would have fixed it, but we shouldn't have had to do that. It may be a relatively rare issue, but it _is_ something that can cause bugs. That being said, it probably _is_ better practice to make sure that you catch all exceptions at language barriers, even if they both use exceptions, but still, you know that some people are going to try and have exceptions cross those barriers, and if it doesn't work, they'll have bugs (and bugs which could be very hard to find depending). So, in the long run at least, it would be very desirable to have this compatability issue resolved. - Jonathan M Davis