On Tuesday, 20 December 2011 at 11:17:32 UTC, Froglegs wrote:
The array concatenation requiring GC I get, but why does a
delegate require it?
This link says D allocates closures on the heap
http://en.wikipedia.org/wiki/Anonymous_function#D
I don't really get why, C++ lambda works well(aside from broken
lack of template lambda's) and do not require heap usage, even
binding it to std::function can generally avoid it if it
doesn't exceed the SBO size
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.