Closure capture loop variables

Idan Arye via Digitalmars-d digitalmars-d at puremagic.com
Sat May 2 11:02:32 PDT 2015


On Friday, 1 May 2015 at 21:42:22 UTC, deadalnix wrote:
> On Friday, 1 May 2015 at 17:51:05 UTC, Walter Bright wrote:
>> On 4/30/2015 5:55 AM, Vladimir Panteleev wrote:
>>> I think Freddy's programs are working as designed.
>>
>> Yes, they are.
>>
>> D closures capture variables by reference. No, we're not 
>> changing that.
>
> The variable is declared in the block, therefore it is a 
> DIFFERENT variable at every iteration.
>
> This or delegate are unable to respect constness/immutability.

Conceptually - I agree. The variables declared in the block are 
different on each iteration, and I seriously doubt anyone 
escaping references to them(be it by closure or by direct 
pointer) means the same variable in all the iterations.

Pragmatically - I'm not sure if this should be changed. This 
problem only appears when the closure escapes the scope - which 
from my experience seems to be the less common case. Unless the 
compiler can accurately tell when a closure escapes it's scope 
and when it doesn't, doing the correct thing will mean allocating 
call-stack frames on the heap *for every iteration* when a 
closure captures variable inside a loop. This can be a big hit on 
performance in the majority of the cases where it isn't really 
needed...


More information about the Digitalmars-d mailing list