On Fri, 25 Apr 2014 07:28:27 -0400, Ola Fosheim Grøstad <[email protected]> wrote:

On Thursday, 24 April 2014 at 13:35:39 UTC, bearophile wrote:
    immutable int x = 3;
    auto result = data[].map!(y => y * x);
}


test.d(1,6): Error: function D main @nogc function allocates a closure with the GC

Such kind of code is common, so a good amount of range-based code can't be @nogc.

Why can't this be on the stack if the referenced local function (lambda) does not outlive the stack frame?

It could. I don't think the compiler is smart enough, as it would need to verify result doesn't go anywhere (flow analysis).

I wonder if LDC/GDC could do it.

One interesting thing about this is that the compiler implementation may make some @nogc code valid on some compilers, and invalid on others, even though the resulting execution is the same.

-Steve

Reply via email to