Why does D rely on a GC?

Brian Rogoff via Digitalmars-d digitalmars-d at puremagic.com
Tue Aug 19 08:38:52 PDT 2014


On Tuesday, 19 August 2014 at 14:13:38 UTC, Andrei Alexandrescu 
wrote:
> On 8/19/14, 12:25 AM, ketmar via Digitalmars-d wrote:
>>> of course, you'll loose such nice features as closures and
>> slices, but
>> hey, C++ doesn't have them too! ok, C++11 has lambdas, and i 
>> don't know
>> if D lambdas can work without GC and don't leak.
>
> They don't use GC if scoped.
>
> Andrei

And, in 2.066, it works with @nogc. Scoped no-gc downward 
closures.

alias dgFloatToFloat = float delegate(float) @nogc;
alias dgFloatPairToFloat = float delegate(float, float) @nogc;

float integrate(scope dgFloatToFloat f,
                 float lo, float hi, size_t n) @nogc {
   float result = 0.0;
   float dx = (hi - lo) / n;
   float dx2 = dx * 0.5;
   for (size_t i = 0; i < n; i++) {
     result += f(lo + i * dx2) * dx;
   }
   return result;
}

float integrate(scope dgFloatPairToFloat f,
                 float x0, float x1, size_t nx,
                 float y0, float y1, size_t ny) @nogc {
   return integrate((y) => integrate((x) => f(x,y), x0, x1, nx),
                    y0, y1, ny);
}

I was going to ask for an @nogc { <fundefs> } to reduce the 
noise, but I just tried it and it seems to work. Nice!



More information about the Digitalmars-d mailing list