Re: Regarding nothrow and @safe

2011-08-25 Thread Nick Sabalausky
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

2011-08-25 Thread Jonathan M Davis
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

2011-08-21 Thread Jacob Carlborg

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

2011-08-20 Thread bearophile
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

2011-08-20 Thread Timon Gehr

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

2011-08-20 Thread Sean Eskapp
== 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

2011-08-20 Thread Jonathan M Davis
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

2011-08-20 Thread Jonathan M Davis
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