delegate confusion

Stefan Koch via Digitalmars-d digitalmars-d at puremagic.com
Fri Aug 4 10:45:04 PDT 2017


On Friday, 4 August 2017 at 17:27:52 UTC, Timon Gehr wrote:
> In D, the foreach loop variable is a distinct declaration for 
> each loop iteration, while in C#, the same loop variable is 
> repeatedly reassigned. In C#, the issue is bad language design, 
> while in D, the issue is a buggy compiler implementation 
> leading to memory corruption.
> [ ... ]
> It's reasonable to assume that the D compiler uses the same 
> memory location for all of the distinct variables. This is a 
> dangling pointer bug, if you wish. Both of your examples should 
> print "0 1 2 3 4".
> [ ... ]
>
> 3) heap allocate a chunk of space for each captured scope (as 
> in lisp and C#).
>
> The way to go is 3). 1) is bad, because it completely prevents 
> closures from being escaped, 2) is bad because it does not 
> allow sharing of closure memory.

Thanks for you insight Timon.
Would you mind writing an ER. (enhancment request) for that.
And a small spec-like proto-DIP ?

I'd love to adopt that behavior for newCTFE where it is actually 
the more straightforward way. (in light of the constraints 
newCTFEs architecture has)


More information about the Digitalmars-d mailing list