Skip Menu |
Report information
Id: 123776
Status: open
Priority: 0/
Queue: perl6

Owner: Nobody
Requestors: raydiak [at] cyberuniverses.com
Cc:
AdminCc:

Severity: (no value)
Tag: Bug
Platform: (no value)
Patch Status: (no value)
VM: (no value)



From: raydiak [...] cyberuniverses.com
Date: Tue, 10 Feb 2015 01:43:34 +0000
To: rakudobug [...] perl.org
Subject: [BUG] Binding a variable at BEGIN time doesn't stick aruond for runtime
Download (untitled) / with headers
text/plain 216b
m: my $a; BEGIN { $a := 1; say $a; }; say $a; rakudo-{parrot,moar} 0cb22e: OUTPUT«1␤(Any)␤» m: my $a; BEGIN { $a = 1; say $a; }; say $a; # works with assignment rakudo-{parrot,moar} 0cb22e: OUTPUT«1␤1␤»
Still reproducible (2017.11, HEAD(5929887)), but is supposed to work?

On 2015-02-09 17:43:52, raydiak@cyberuniverses.com wrote:
Show quoted text
> m: my $a; BEGIN { $a := 1; say $a; }; say $a;
> rakudo-{parrot,moar} 0cb22e: OUTPUT«1␤(Any)␤»
>
> m: my $a; BEGIN { $a = 1; say $a; }; say $a; # works with assignment
> rakudo-{parrot,moar} 0cb22e: OUTPUT«1␤1␤»


RT-Send-CC: perl6-compiler [...] perl.org
Download (untitled) / with headers
text/plain 911b
On Fri, 01 Dec 2017 12:09:05 -0800, alex.jakimenko@gmail.com wrote: Show quoted text
> Still reproducible (2017.11, HEAD(5929887)), but is supposed to work?
Don't see any reason why that'd be questionable. Show quoted text
> On 2015-02-09 17:43:52, raydiak@cyberuniverses.com wrote:
> > m: my $a; BEGIN { $a := 1; say $a; }; say $a; > > rakudo-{parrot,moar} 0cb22e: OUTPUT«1␤(Any)␤» > > > > m: my $a; BEGIN { $a = 1; say $a; }; say $a; # works with assignment > > rakudo-{parrot,moar} 0cb22e: OUTPUT«1␤1␤»
Another manifestation of the same bug: <Zoffix__> m: BEGIN { my $a1 := 42; say $a1; } <camelia> rakudo-moar deffe54b8: OUTPUT: «42␤» <Zoffix__> m: BEGIN { my $a1 = 42; say $a1; } <camelia> rakudo-moar deffe54b8: OUTPUT: «42␤» <Zoffix__> m: BEGIN my $a1 = 42; say $a1; <camelia> rakudo-moar deffe54b8: OUTPUT: «42␤» <Zoffix__> m: BEGIN my $a1 := 42; say $a1; <camelia> rakudo-moar deffe54b8: OUTPUT: «(Mu)␤»
RT-Send-CC: perl6-compiler [...] perl.org
Download (untitled) / with headers
text/plain 1.4k
On Tue, 30 Jan 2018 15:08:38 -0800, cpan@zoffix.com wrote: Show quoted text
> On Fri, 01 Dec 2017 12:09:05 -0800, alex.jakimenko@gmail.com wrote:
> > Still reproducible (2017.11, HEAD(5929887)), but is supposed to work?
> > Don't see any reason why that'd be questionable. >
> > On 2015-02-09 17:43:52, raydiak@cyberuniverses.com wrote:
> > > m: my $a; BEGIN { $a := 1; say $a; }; say $a; > > > rakudo-{parrot,moar} 0cb22e: OUTPUT«1␤(Any)␤» > > > > > > m: my $a; BEGIN { $a = 1; say $a; }; say $a; # works with assignment > > > rakudo-{parrot,moar} 0cb22e: OUTPUT«1␤1␤»
> > > Another manifestation of the same bug: > > <Zoffix__> m: BEGIN { my $a1 := 42; say $a1; } > <camelia> rakudo-moar deffe54b8: OUTPUT: «42␤» > <Zoffix__> m: BEGIN { my $a1 = 42; say $a1; } > <camelia> rakudo-moar deffe54b8: OUTPUT: «42␤» > <Zoffix__> m: BEGIN my $a1 = 42; say $a1; > <camelia> rakudo-moar deffe54b8: OUTPUT: «42␤» > <Zoffix__> m: BEGIN my $a1 := 42; say $a1; > <camelia> rakudo-moar deffe54b8: OUTPUT: «(Mu)␤»
Tracked this to Perl6::World.compile_in_context but leaving it there, as it's getting too hard. Need to gain a few levels first. The comment in the method reads: # Create outer lexical contexts with all symbols visible. Maybe # we can be a bit smarter here some day. But for now we just make a # single frame and copy all the visible things into it. So I imagine the binding gets made to this faked out block and never propagates back to the source where all the lexicals were copied from.
RT-Send-CC: perl6-compiler [...] perl.org
Download (untitled) / with headers
text/plain 2.3k
On Tue, 30 Jan 2018 19:03:13 -0800, cpan@zoffix.com wrote: Show quoted text
> On Tue, 30 Jan 2018 15:08:38 -0800, cpan@zoffix.com wrote:
> > On Fri, 01 Dec 2017 12:09:05 -0800, alex.jakimenko@gmail.com wrote:
> > > Still reproducible (2017.11, HEAD(5929887)), but is supposed to > > > work?
> > > > Don't see any reason why that'd be questionable. > >
> > > On 2015-02-09 17:43:52, raydiak@cyberuniverses.com wrote:
> > > > m: my $a; BEGIN { $a := 1; say $a; }; say $a; > > > > rakudo-{parrot,moar} 0cb22e: OUTPUT«1␤(Any)␤» > > > > > > > > m: my $a; BEGIN { $a = 1; say $a; }; say $a; # works with > > > > assignment > > > > rakudo-{parrot,moar} 0cb22e: OUTPUT«1␤1␤»
> > > > > > Another manifestation of the same bug: > > > > <Zoffix__> m: BEGIN { my $a1 := 42; say $a1; } > > <camelia> rakudo-moar deffe54b8: OUTPUT: «42␤» > > <Zoffix__> m: BEGIN { my $a1 = 42; say $a1; } > > <camelia> rakudo-moar deffe54b8: OUTPUT: «42␤» > > <Zoffix__> m: BEGIN my $a1 = 42; say $a1; > > <camelia> rakudo-moar deffe54b8: OUTPUT: «42␤» > > <Zoffix__> m: BEGIN my $a1 := 42; say $a1; > > <camelia> rakudo-moar deffe54b8: OUTPUT: «(Mu)␤»
> > > > Tracked this to Perl6::World.compile_in_context but leaving it there, > as it's getting too hard. > Need to gain a few levels first. > > The comment in the method reads: > # Create outer lexical contexts with all symbols visible. Maybe > # we can be a bit smarter here some day. But for now we just make a > # single frame and copy all the visible things into it. > > So I imagine the binding gets made to this faked out block and never > propagates back to the source where all the lexicals were copied from.
More comments: https://irclog.perlgeek.de/perl6/2018-02-02#i_15769787 15:11 jnthn Zoffix: Yeah. Lexpads are immutable, and when we compile a BEGIN we obviously haven't finished the outer block yet, so we have to fake something up. But what? Containers are cloned from a "prototype", and the fake lexpad contains the static container. Thus what's actually happening is that on entry to the scope post-compilation, the Scalar is cloned complete with the value set in the prototype. 15:12 Of course, binding doesn't have that level of indirection so there's no way it can work. 15:12 We should perhaps detect it at compile time and say it can't work. Or...we could try diffing the scope after each BEGIN block and trying to somehow propagate bindings.


This service is sponsored and maintained by Best Practical Solutions and runs on Perl.org infrastructure.

For issues related to this RT instance (aka "perlbug"), please contact perlbug-admin at perl.org