Is "Out of Memory" a recoverable error?

Michel Fortin michel.fortin at michelf.com
Thu Dec 4 04:34:18 PST 2008


On 2008-12-02 07:13:12 -0500, Walter Bright <newshound1 at digitalmars.com> said:

> I asked this over on stackoverflow.com to see what people using other 
> languages have to say, as well as the D community. The reason I ask is 
> to see if memory allocation can be allowed in functions marked 
> "nothrow".
> 
> http://stackoverflow.com/questions/333736/is-out-of-memory-a-recoverable-error

I think you got the question wrong. My answer would be: it depends.

I think you could make this simple reasonable rule: anything that would 
throw an exception in a nothrow function yeilds a fatal error. When you 
want to catch out of memory errors (or any other error for that 
matter), just avoid nothrow.

How does that sound?

It sounds to me like nothrow functions are going to be dangerous in big 
applications since it could make some distant part of an app crash the 
whole thing. At least, you should be allowed to handle those exceptions 
(out of memory, range error, etc) in an error handler function before 
it kills the current thread. But even with that it'll be hard to 
guarenty proper cleanup; that's why I'm saying it makes nothrow 
dangerous.

Note however that you can't guarenty proper cleanup either in case of 
division by zero or invalid pointer dereferencing, so by allowing 
dynamic allocation you're not extending the problem very much. It'd be 
great if those could throw exceptions when not in a nothrow function.

-- 
Michel Fortin
michel.fortin at michelf.com
http://michelf.com/




More information about the Digitalmars-d mailing list