Rebinding binding

0 views
Skip to first unread message

Luke Palmer

unread,
Aug 17, 2005, 6:21:19 PM8/17/05
to Perl6 Language List
Two years ago or so, I became very happy to learn that the left side
of binding works just like a routine signature. So what if binding
*were* just a routine signature. That is, could we make this:

sub foo () {
say "hello";
my $x := bar();
say "goodbye $x";
}

Equivalent to this:

sub foo () {
say "hello";
-> $x {
say "goodbye $x";
}.(bar());
}

Then observe:

sub foo() {
say "hello";
my $x := 1|2|3;
say "goodbye $x";
}

foo();
__END__
hello
goodbye 1
goodbye 2
goodbye 3

If you bind an existing variable (instead of introducing a new one
with my), you get a delimited continuation for the scope of that
variable. Consequently, if you bind a global, you get a full
continuation.

I know, I know, this is putting continuations into the realm of
!/<upper>{10...}/, but I have an argument for this. The only people
who will ever see the continuations are the people *implementing*
junctions and junction-like things. And those people are already
gurus, so they should be comfortable in dealing with continuations.

The only other time that a user might get caught with continuation
"weirdness" is if they're binding to junctions as above (since there
are no other such values in the language... just yet). And with the
default "no junctions", junctions aren't allowed in variables anyway,
so what do they expect?

Luke

Reply all
Reply to author
Forward
0 new messages