Add GC-free closures to D, similar to the ones C++ has

a11e99z black80 at bk.ru
Thu Sep 5 15:17:04 UTC 2019


On Thursday, 5 September 2019 at 14:46:08 UTC, James Lu wrote:
> Add GC-free closures to D. Less GC reliance means less memory 
> fragmentation, enabling lower-level uses of D to use closures.
>
> This has precedent in C blocks and in C++'s lambdas.

1)
> import std;
>
> auto mul(R)( R r, int n) /*@nogc*/ {
>     // simple GCed version
>     return r.map!( e => e*n);
> 
>     // more complicated but noGC version
>     //return zip( r, n.repeat).map!( z => z[0]*z[1]);
> }
> 
> void main() {
>     iota( 0, 10).mul( 5).writeln;
> }

2) lambda can capture something that stored in GC 
memory(array,AA,class,new struct,..)
   so for right working (GC:mark/scan) lambda also should be 
allocated in GC memory.
   (opposite: RCed-lambda, emplace, GC.addRange/remove)


More information about the Digitalmars-d mailing list