Re: Regarding nothrow and @safe
Jacob Carlborg d...@me.com wrote in message news:j2qn7n$1db7$1...@digitalmars.com... On 2011-08-21 02:26, Jonathan M Davis wrote: The short answer: You don't. It's an incredibly bad idea. The long answer: You catch Error - or OutOfMemoryError if you want that specific one. So, you could try and catch it and handle it, but most of the cleanup during the unwinding of the stack gets skipped. scope statements and destructors don't get called. Your program is not likely to be in state where it makes any real sense to try and continue. You _can_ do it, but it's a bad idea. - Jonathan M Davis What about if you have an application doing heavy image/video processing, the application could empty some caches or similar. The application could still work, just not as fast as with caches. I remember some discussion awhile back about having some sort of scheme in the GC where you could tell the GC Hey, in low-memory situations, instead of bailing out with an Error, call this delegate I'm giving you and I'll try to clear out my caches to free up some memory. Unfortunately, I don't think anything's actually come out of that so far. I really hope it does though, it's a great idea.
Re: Regarding nothrow and @safe
On Thursday, August 25, 2011 11:38 Nick Sabalausky wrote: Jacob Carlborg d...@me.com wrote in message news:j2qn7n$1db7$1...@digitalmars.com... On 2011-08-21 02:26, Jonathan M Davis wrote: The short answer: You don't. It's an incredibly bad idea. The long answer: You catch Error - or OutOfMemoryError if you want that specific one. So, you could try and catch it and handle it, but most of the cleanup during the unwinding of the stack gets skipped. scope statements and destructors don't get called. Your program is not likely to be in state where it makes any real sense to try and continue. You _can_ do it, but it's a bad idea. - Jonathan M Davis What about if you have an application doing heavy image/video processing, the application could empty some caches or similar. The application could still work, just not as fast as with caches. I remember some discussion awhile back about having some sort of scheme in the GC where you could tell the GC Hey, in low-memory situations, instead of bailing out with an Error, call this delegate I'm giving you and I'll try to clear out my caches to free up some memory. Unfortunately, I don't think anything's actually come out of that so far. I really hope it does though, it's a great idea. Not a bad idea. It would still have to throw an OutOfMemoryError if it really couldn't free enough memory, but it would still improve the situation for anyone looking to use caches or anything else which could have its memory freed and still allow the program to function correctly if the memory consumption gets too high. - Jonathan M Davis
Re: Regarding nothrow and @safe
On 2011-08-21 02:26, Jonathan M Davis wrote: On Saturday, August 20, 2011 18:18:25 Sean Eskapp wrote: bearophile: As far as I know they have decided to make memory overflow errors, so they are not exceptions, you can't catch them. Other people will confirm this or not. In this case, how would you go about handling out-of-memory situations? A systems programming language should certainly give the programmer the option to deal with this. The short answer: You don't. It's an incredibly bad idea. The long answer: You catch Error - or OutOfMemoryError if you want that specific one. So, you could try and catch it and handle it, but most of the cleanup during the unwinding of the stack gets skipped. scope statements and destructors don't get called. Your program is not likely to be in state where it makes any real sense to try and continue. You _can_ do it, but it's a bad idea. - Jonathan M Davis What about if you have an application doing heavy image/video processing, the application could empty some caches or similar. The application could still work, just not as fast as with caches. -- /Jacob Carlborg
Re: Regarding nothrow and @safe
Sean Eskapp: Does nothrow mean the function itself does not through exceptions, or that the function body, as well as any called functions, do not throw? I wonder because allocating new memory inside a @safe nothrow function works, even though I'm used to new allocations throwing exceptions or Out-Of-Memory errors. As far as I know they have decided to make memory overflow errors, so they are not exceptions, you can't catch them. Other people will confirm this or not. Bye, bearophile
Re: Regarding nothrow and @safe
On 08/20/2011 08:18 PM, Sean Eskapp wrote: bearophile: As far as I know they have decided to make memory overflow errors, so they are not exceptions, you can't catch them. Other people will confirm this or not. In this case, how would you go about handling out-of-memory situations? A systems programming language should certainly give the programmer the option to deal with this. You can catch errors, if you want to deal with them.
Re: Regarding nothrow and @safe
== Quote from Timon Gehr (timon.g...@gmx.ch)'s article On 08/20/2011 08:18 PM, Sean Eskapp wrote: bearophile: As far as I know they have decided to make memory overflow errors, so they are not exceptions, you can't catch them. Other people will confirm this or not. In this case, how would you go about handling out-of-memory situations? A systems programming language should certainly give the programmer the option to deal with this. You can catch errors, if you want to deal with them. Oops, right. In my mind, exceptions are still anything which can be thrown or caught. I need to remember that it has a more specific meaning in D.
Re: Regarding nothrow and @safe
On Saturday, August 20, 2011 18:18:25 Sean Eskapp wrote: bearophile: As far as I know they have decided to make memory overflow errors, so they are not exceptions, you can't catch them. Other people will confirm this or not. In this case, how would you go about handling out-of-memory situations? A systems programming language should certainly give the programmer the option to deal with this. The short answer: You don't. It's an incredibly bad idea. The long answer: You catch Error - or OutOfMemoryError if you want that specific one. So, you could try and catch it and handle it, but most of the cleanup during the unwinding of the stack gets skipped. scope statements and destructors don't get called. Your program is not likely to be in state where it makes any real sense to try and continue. You _can_ do it, but it's a bad idea. - Jonathan M Davis
Re: Regarding nothrow and @safe
On Saturday, August 20, 2011 16:41:01 Sean Eskapp wrote: Does nothrow mean the function itself does not through exceptions, or that the function body, as well as any called functions, do not throw? I wonder because allocating new memory inside a @safe nothrow function works, even though I'm used to new allocations throwing exceptions or Out-Of-Memory errors. A nothrow function must not allow any Exceptions escape from it. So, it must either catch them all or it must only call functions which are nothrow and throw nothing itself. An Error can still escape a nothrow function (though you may not be able to throw one manually, I don't know), because when an Error occurs, your program is pretty much toast. You're not normally supposed to try and catch those. - Jonathan M Davis