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