We need to have a way to say "convert this nested function into a struct"

Meta via Digitalmars-d digitalmars-d at puremagic.com
Sat Jun 6 11:32:12 PDT 2015


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.


More information about the Digitalmars-d mailing list