confusing (buggy?) closure behaviour

Zoran Isailovski dmd.zoc at spamgourmet.com
Tue Dec 16 09:19:44 PST 2008


Sergey Gromov Wrote:

> Sat, 13 Dec 2008 06:59:51 -0500, Zoran Isailovski wrote:
> 
> > Anyway, following the latter pattern, you don't need global analysis.
> > You can determine if n is on the stack (it is - it's an argument),
> > you can determine if it's referenced from within the closure (it is),
> > and you can determine if the closure is being returned (it is). The
> > compiler should IMO then generate an error (or warning) about the
> > return statement, perhaps stating something like "cannot return a
> > delegate that refers to variables in local scope", or something like
> > that.
> 
> There was a long discussion on this topic.  See
> http://www.digitalmars.com/d/archives/digitalmars/D/Escape_analysis_78791.html
> for an insight.  To summarize, it's almost always potentially unsafe to
> use stack closures.  For instance, if you pass closure to a function,
> that function can save that closure to a global variable, so the closure
> outlives the container function without being explicitly returned.  If
> compiler forbids any potentially unsafe use of closures, it would make
> them next to useless and also would break lots of valid code, for
> instance a significant part of Tango library.

Thanks for the hint.


More information about the Digitalmars-d-learn mailing list