Thanks for the suggestions regarding the `scope` parameter attribute. I'll look into it!

On Sunday, 21 May 2017 at 01:30:51 UTC, Adam D. Ruppe wrote:
On Sunday, 21 May 2017 at 00:49:23 UTC, Stanislav Blinov wrote:
[...] you *can* write out the struct now, it just has more tedious syntax.

This exact statement applied to C++ before C++11, but the introduction of lambda expression significantly changed the way people write and think about C++. Sometimes syntactic sugar can have huge impact on a language.

I think that creating anonymous structs on the spot (value type closures) is not a replacement for the current GC'd closures - it has a completely different meaning that can be exactly what you need in particular situations, not only for performance-related issues. As an example, consider this code:

    void delegate()[] arr;

    foreach(i; 0..5)
    {
        arr ~= () => writeln(i);
    }

    foreach(f; arr)
    {
        f();
    }

This is going to print "4 4 4 4", which might be the desired behavior. In other occasions you want to create a closure that captures the outer context by value. Here's some example pseudocode:

    void value_delegate()[] arr;

    foreach(i; 0..5)
    {
        arr ~= [i]() => writeln(i);
    }

    foreach(f; arr)
    {
        f();
    }

The pseudocode above would explicitly capture `i` by value and produce a `struct`-like closure. It would print "0 1 2 3".

Reply via email to