On 5/27/21 4:46 PM, IGotD- wrote:
On Thursday, 27 May 2021 at 18:13:17 UTC, Adam D. Ruppe wrote:
If the delegate is created by the GC and stored it will still be
managed by the GC, along with its captured vars.
As long as the GC can see the delegate in your example you should be
OK. But if it is held on to by a C or OS lib, the GC might not see it
and you'd have to addRoot or something to ensure it stays in.
With lambdas in C++ you can cherrypick captures the way you want, then
somehow this can be converted to an std::function and this is where it
goes on the heap as well.
In D, how does the compiler know what captures it is supposed to store,
or does it take the whole lot?
For closures, it uses semantic analysis to see which variables are used
in the lambda, and then allocates a block at the start of the function
to hold those variables.
-Steve