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