On Saturday, 22 June 2019 at 16:52:07 UTC, Anonymouse wrote:
When entering the following function, does it allocate:
1. 0 times, because while there are closures defined, none is
ever called?
2. 2 times, because there are closures over two variables?
3. 20 times, because there are 20 unique closures?
4. One time, allocating a single closure for all variables
referenced in nested functions. Easy to check by inspecting the
generated asm (https://run.dlang.io/is/qO3JxO):
void receive(void delegate() a, void delegate() b) {}
void foo()
{
int i;
long l;
void foo1() { i += 1; }
void foo2() { l += 1; }
receive(&foo1, &foo2);
}
When adding `scope` to the `receive()` params, the closure is
allocated on the stack.