On Saturday, 6 June 2015 at 06:59:26 UTC, Jonathan M Davis wrote:
That being said, we really should find a way to make it so that
lambda's don't turn into delegates unless they really need to.
In many, many cases, they should be plenty efficient without
having to force the issue with functors, but they aren't,
because we allocate for them unnecessarily. I don't know how
easy it'll be though for the compiler devs to figure out how to
optimize that, since sometimes you _do_ need to allocate a
closure.
int n = 2;
auto r1 = [1, 2, 3].map!(x => x + n); //Ok
auto r2 = [1, 2, 3].map!(function(x) => x + n); //Error
auto r3 = [1, 2, 3].map!(curry!(function(x, n) => x + n, n)); //Ok
IMO this is pretty much the same thing as copying the variables
you want to close over into a struct, with the advantage that we
can do it today. The only thing is that you have to specify which
variables you want to copy, which isn't necessarily a bad thing.