On 12/20/11 5:56 AM, Froglegs wrote:

C++ "closures" do not allow you to maintain a reference to the context
after the function containing said context returns. Instead, C++
allows you to choose between copying the variables into the lambda
instance, or referencing them (the references may not "escape"). The
compiler may or may not enforce correct uses of reference captures. In
contrast, D's approach is both intuitive (does not copy variables) and
safe (conservatively allocates on the heap), with the downside of
requiring the context to be garbage-collected.

Ah, makes sense now, thanks.

Still it seems like a case of "you pay for what you don't use", and
seems like a real downer for adopting D since you loose the ability to
use lambda's without having the GC shoved down your throat(wouldn't be
so bad if the D GC was known for performance, but everything I've read
indicates it is quite slow).

D's pass-down lambdas do not need memory allocation. As far as I remember none of std.algorithm's use of lambda allocates memory.

Andrei

Reply via email to