Full closures

Frank Benoit keinfarbton at googlemail.com
Fri Aug 15 06:54:13 PDT 2008


Like shown in http://d.puremagic.com/issues/show_bug.cgi?id=2043
i think the current full closure implementation should take a redesign.

My suggestion:
Let D have 2 kind of delegate closures (I don't know how to call this 
correctly)
local delegates and heap delegates

local delegate are that from D1 without modifiction.
They can access every local variable in the surrounding scope, no heap 
allocation if the addess is taken. It is expected the adress is not used 
outside the allowed scope.

heap delegates
- can only access variables from the surrounding scope, if they are 
marked as 'const', 'invariant' or 'final'. Which means, they are not 
expected to changed after initialization.
- with instantiation of the delegate, a heap allocated frame is used to 
store a copy of the reference 'final' varialbles for the delegate.
That means in case of a loop, the delegate get a new heap allocation 
with each iteration.

foreach( element; container ){
   const c = element;
   logLater( new { writefln(c); });
}











More information about the Digitalmars-d mailing list