On 6/12/05, Dave Mitchell <[EMAIL PROTECTED]> wrote:
> You may be using slow evals, but other fast code may not be. Should the
> closure in
>
>      sub foo { my $x = 1; return sub { 1 } }
>
> also capture the current instance of $x? You are basically condeming any
> code that creates any closure, however simple, to basically hang on to
> just about any data that has ever existed, in the vague hope that maybe,
> just maybe, some day some code may use an eval and make use of that data.

A simple analysis of the parse tree should show that sub { 1 } isn't
going to access $x.  I personally don't see what's wrong with marking
certain constructs (eval, symbolic dereference, stash access, etc.) as
"dirty" and forcing a closure to close over everything if one is
present.  This is optimizer stuff, really, in the same class of
problems as optimizing Parrot's continuation-based sub calls into
bsr/ret where possible.

Hmm...maybe the answer is that most destruction isn't guaranteed to be
timely, and any object which *is* guaranteed to have timely
destruction is illegal to close over unless the programmer marks it as
okay.  Or maybe that's only with an appropriate stricture...

--
Brent 'Dax' Royal-Gordon <[EMAIL PROTECTED]>
Perl and Parrot hacker

Reply via email to