Let's get the semantic around closure fixed.

Q. Schroll qs.il.paperinik at gmail.com
Fri May 28 02:41:27 UTC 2021


On Friday, 21 May 2021 at 00:54:27 UTC, Max Haughton wrote:
> On Friday, 21 May 2021 at 00:31:52 UTC, TheGag96 wrote:
>> The delegate-related thing I really want improved is being 
>> able to capture local variables in places like:
>>
>> ```d
>> int i = 3;
>> someRange.map!(x => x.thing == i).each!writeln;
>> ```
>>
>> ...without needing the GC, since we "know" that `i` doesn't 
>> escape. Dunno if that's a pipe dream, though.
>
> This has to be an aim. It's simply stupid that using map in the 
> way it's intended to be used results in a GC allocation (there 
> are workarounds, but this is missing the point entirely). I 
> know it won't be easy, but quite frankly if it's not possible 
> that's a knock on us and our infrastructure - if we can't do 
> big and important things properly we need to change that too.

I was a little surprised that it needs the GC in the first place. 
It's a template parameter after all. Here, it even seems a 
runtime delegate parameter would shine since it could be marked 
`scope`. If nothing else goes on, an allocation is not necessary. 
It's even `@nogc`. (Maybe the lambda bound to the alias could 
have `scope` implied?)


More information about the Digitalmars-d mailing list