On Sunday, 5 October 2014 at 15:03:08 UTC, ketmar via Digitalmars-d wrote:
so Error should not be catchable and should crash immidiately, without any unwinding. as long as Errors are just another kind of exception,
the promise must be kept.

I find it strange if you cannot recover from out-of-memory-error. The common trick is to preallocate a bulk of memory, then free it when you throw the out of memory exception so that you can unwind. When destroying the out-of-memory-object you need to reallocate the bulk of memory.

I also find the D terminology confusing, one should avoid redefining terms.

Does D have exception chaining? The language spec seems to imply that finally swallows thrown exceptions if another exception A is running and stuff them in a bag in the A exception. This is kind of dangerous since you hide potentially serious exceptions this way and it is not what I think of as exception chaining. To me exception chaining is preserve the exception chain on re-throws (like preserving the call stack).

So yep, ketmar, you are right. You should probably not be able to throw in finally without catching it, and you should be able to do a catch all without wrapping it up in a function. The alternatives such as the mechanics described in the language specs will lead to unreliable exception handling and poor recovery strategies IMO.

Reply via email to