www.digitalmars.com         C & C++   DMDScript  

digitalmars.D - Re: GC conservatism -- again

reply Sean Kelly <sean invisibleduck.org> writes:
Adam Ruppe Wrote:

 On 12/27/10, Steven Schveighoffer <schveiguy yahoo.com> wrote:
 What about tools to make deallocation easier?  For example, we have
 scope(exit) that you could potentially use to ensure a memory block is
 deallocated on exit from a scope, what about a thread exit?

It seems to me that the simplest thing might simply be a list of delegates stored with the thread: thread.onexit ~= { free(whatever); };

Already possible via static dtors.
Dec 30 2010
parent reply Andrei Alexandrescu <SeeWebsiteForEmail erdani.org> writes:
On 12/30/10 11:19 AM, Sean Kelly wrote:
 Adam Ruppe Wrote:

 On 12/27/10, Steven Schveighoffer<schveiguy yahoo.com>  wrote:
 What about tools to make deallocation easier?  For example, we have
 scope(exit) that you could potentially use to ensure a memory block is
 deallocated on exit from a scope, what about a thread exit?

It seems to me that the simplest thing might simply be a list of delegates stored with the thread: thread.onexit ~= { free(whatever); };

Already possible via static dtors.

Not dynamically... Andrei
Dec 30 2010
next sibling parent reply Sean Kelly <sean invisibleduck.org> writes:
Andrei Alexandrescu Wrote:

 On 12/30/10 11:19 AM, Sean Kelly wrote:
 Adam Ruppe Wrote:

 On 12/27/10, Steven Schveighoffer<schveiguy yahoo.com>  wrote:
 What about tools to make deallocation easier?  For example, we have
 scope(exit) that you could potentially use to ensure a memory block is
 deallocated on exit from a scope, what about a thread exit?

It seems to me that the simplest thing might simply be a list of delegates stored with the thread: thread.onexit ~= { free(whatever); };

Already possible via static dtors.

Not dynamically...

void*[] toFree; static ~this() { foreach(e; toFree) free(e); } What am I missing?
Dec 30 2010
parent reply Andrei Alexandrescu <SeeWebsiteForEmail erdani.org> writes:
On 12/30/10 12:38 PM, Sean Kelly wrote:
 Andrei Alexandrescu Wrote:

 On 12/30/10 11:19 AM, Sean Kelly wrote:
 Adam Ruppe Wrote:

 On 12/27/10, Steven Schveighoffer<schveiguy yahoo.com>   wrote:
 What about tools to make deallocation easier?  For example, we have
 scope(exit) that you could potentially use to ensure a memory block is
 deallocated on exit from a scope, what about a thread exit?

It seems to me that the simplest thing might simply be a list of delegates stored with the thread: thread.onexit ~= { free(whatever); };

Already possible via static dtors.

Not dynamically...

void*[] toFree; static ~this() { foreach(e; toFree) free(e); } What am I missing?

I'm thinking of an API that allows people to dynamically add "to do" stuff, a la C's atexit(). Yours above is dynamic (because client code can append to toFree) but is hand-written by the client. Andrei
Dec 30 2010
parent Sean Kelly <sean invisibleduck.org> writes:
Andrei Alexandrescu Wrote:

 On 12/30/10 12:38 PM, Sean Kelly wrote:
 Andrei Alexandrescu Wrote:

 On 12/30/10 11:19 AM, Sean Kelly wrote:
 Adam Ruppe Wrote:

 On 12/27/10, Steven Schveighoffer<schveiguy yahoo.com>   wrote:
 What about tools to make deallocation easier?  For example, we have
 scope(exit) that you could potentially use to ensure a memory block is
 deallocated on exit from a scope, what about a thread exit?

It seems to me that the simplest thing might simply be a list of delegates stored with the thread: thread.onexit ~= { free(whatever); };

Already possible via static dtors.

Not dynamically...

void*[] toFree; static ~this() { foreach(e; toFree) free(e); } What am I missing?

I'm thinking of an API that allows people to dynamically add "to do" stuff, a la C's atexit(). Yours above is dynamic (because client code can append to toFree) but is hand-written by the client.

Hand written but trivial. It would be easy enough to add the feature to core.runtime or core.thread though.
Dec 30 2010
prev sibling parent "Simen kjaeraas" <simen.kjaras gmail.com> writes:
Andrei Alexandrescu <SeeWebsiteForEmail erdani.org> wrote:

 I'm thinking of an API that allows people to dynamically add "to do"  
 stuff, a la C's atexit(). Yours above is dynamic (because client code  
 can append to toFree) but is hand-written by the client.

So like this: import std.stdio; void delegate()[] terminators; void atExit( void delegate() dg ) { terminators ~= dg; } static ~this( ) { foreach ( t; terminators ) { t( ); } } void main( ) { atExit( {writeln("OH HAI! I BROKE UR THREAD");} ); } -- Simen
Dec 30 2010