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...