Let's get the semantic around closure fixed.
Ola Fosheim Grostad
ola.fosheim.grostad at gmail.com
Tue May 18 19:04:55 UTC 2021
On Tuesday, 18 May 2021 at 18:51:40 UTC, Paul Backus wrote:
> On Tuesday, 18 May 2021 at 17:53:20 UTC, Ola Fosheim Grostad
> wrote:
>>
>> Does a delegate do anything more than retaining a pointer to
>> the stack record?
>> Anyway, it should not escape the scope it references. So
>> escape analysis is your friend.
>
> The compiler does escape analysis and pre-emptively allocates
> any variables that escape through closures on the GC heap.
>
> The bug here is that, for variables declared in loop bodies,
> the compiler *should* allocate a new copy on the heap for each
> loop iteration, but instead it only allocates one copy that's
> reused across all iterations.
Yes, absolutely. I dont use delegates much (well, I did in D1 but
that is a long time ago), but the difference between point 3 and
point 7 in the language reference is tricky to grasp. So if you
bind a local function to a delegate parameter you dont take a
closure, but if you assign to a delegate variable you get a
closure?
"7. Delegates to non-static nested functions contain two pieces
of data: the pointer to the stack frame of the lexically
enclosing function (called the context pointer) and the address
of the function."
More information about the Digitalmars-d
mailing list