Author: lwall
Date: 2009-11-17 19:22:58 +0100 (Tue, 17 Nov 2009)
New Revision: 29112
Modified:
docs/Perl6/Spec/S02-bits.pod
docs/Perl6/Spec/S04-control.pod
docs/Perl6/Spec/S06-routines.pod
docs/Perl6/Spec/S11-modules.pod
Log:
[specs] s/CONTEXT/DYNAMIC/ to avoid confusion of concepts
Modified: docs/Perl6/Spec/S02-bits.pod
===================================================================
--- docs/Perl6/Spec/S02-bits.pod 2009-11-17 17:43:12 UTC (rev 29111)
+++ docs/Perl6/Spec/S02-bits.pod 2009-11-17 18:22:58 UTC (rev 29112)
@@ -14,7 +14,7 @@
Created: 10 Aug 2004
Last Modified: 17 Nov 2009
- Version: 188
+ Version: 189
This document summarizes Apocalypse 2, which covers small-scale
lexical items and typological issues. (These Synopses also contain
@@ -2030,7 +2030,7 @@
PROCESS # Process-related globals (superglobals)
COMPILING # Lexical symbols in the scope being compiled
CALLER # Contextual symbols in the immediate caller's lexical scope
- CONTEXT # Contextual symbols in my or any caller's lexical scope
+ DYNAMIC # Contextual symbols in my or any caller's lexical scope
The following relative names are also reserved but may be used
anywhere in a name:
@@ -2283,18 +2283,18 @@
=item *
-The C<CONTEXT> pseudo-package is just like C<CALLER> except that
+The C<DYNAMIC> pseudo-package is just like C<CALLER> except that
it starts in the current dynamic scope and from there scans outward
through all dynamic scopes until it finds a contextual variable of that
name in that dynamic context's associated lexical pad. (This search
is implied for variables with the C<*> twigil; hence C<$*FOO> is
-equivalent to C<< CONTEXT::<$*FOO> >>.) If, after scanning outward
+equivalent to C<< DYNAMIC::<$*FOO> >>.) If, after scanning outward
through all those dynamic scopes, there is no variable of that name
in any immediately associated lexical pad, it strips the C<*> twigil
out of the name and looks in the C<GLOBAL> package followed by the
C<PROCESS> package. If the value is not found, it returns failure.
-Unlike C<CALLER>, C<CONTEXT> will see a contextual variable that is
+Unlike C<CALLER>, C<DYNAMIC> will see a contextual variable that is
declared in the current scope, since it starts search 0 scopes up the
stack rather than 1. You may, however, use C<< CALLER::<$*foo> >>
to bypass a contextual definition of C<$*foo> in your current context,
Modified: docs/Perl6/Spec/S04-control.pod
===================================================================
--- docs/Perl6/Spec/S04-control.pod 2009-11-17 17:43:12 UTC (rev 29111)
+++ docs/Perl6/Spec/S04-control.pod 2009-11-17 18:22:58 UTC (rev 29112)
@@ -13,8 +13,8 @@
Created: 19 Aug 2004
- Last Modified: 12 Nov 2009
- Version: 87
+ Last Modified: 17 Nov 2009
+ Version: 88
This document summarizes Apocalypse 4, which covers the block and
statement syntax of Perl.
@@ -634,8 +634,8 @@
Although a bare block occuring as a single statement is no longer
a do-once loop, it still executes immediately as in PerlĀ 5, as if it
were immediately dereferenced with a C<.()> postfix, so within such a
-block C<CONTEXT::> refers to the scope surrounding the block. But unlike
-an explicit call, C<CALLER::> doesn't count it as a routine boundary.
+block C<CALLER::> refers to the dynamic scope associated
+with the lexical scope surrounding the block.
If you wish to return a closure from a function, you must use an
explicit prefix such as C<return> or C<sub> or C<< -> >>.
Modified: docs/Perl6/Spec/S06-routines.pod
===================================================================
--- docs/Perl6/Spec/S06-routines.pod 2009-11-17 17:43:12 UTC (rev 29111)
+++ docs/Perl6/Spec/S06-routines.pod 2009-11-17 18:22:58 UTC (rev 29112)
@@ -2140,9 +2140,9 @@
C<Capture> object is generated, not when it is later bound (which
could happen more than once).
-=head2 The C<context> and C<caller> functions
+=head2 The C<dynamic> and C<caller> functions
-The C<context> function takes a list of matchers and interprets them
+The C<dynamic> function takes a list of matchers and interprets them
as a navigation path from the current context to a location in the
dynamic scope, either the current context itself or some context
from which the current context was called. It returns an object
@@ -2153,18 +2153,18 @@
The current context is accessed with a null argument list.
- say " file ", context().file,
- " line ", context().line;
+ say " file ", dynamic().file,
+ " line ", dynamic().line;
which is equivalent to:
- say " file ", CONTEXT::<$?FILE>,
- " line ", CONTEXT::<$?LINE>;
+ say " file ", DYNAMIC::<$?FILE>,
+ " line ", DYNAMIC::<$?LINE>;
The immediate caller of this context is accessed by skipping one level:
- say " file ", context(1).file,
- " line ", context(1).line;
+ say " file ", dynamic(1).file,
+ " line ", dynamic(1).line;
You might think that that must be the current function's caller,
but that's not necessarily so. This might return an outer block in
@@ -2172,60 +2172,60 @@
control operator on behalf of our block. To get outside your current
routine, see C<caller> below.
-The C<context> function may be given arguments
+The C<dynamic> function may be given arguments
telling it which higher scope to look for. Each argument is processed
in order, left to right. Note that C<Any> and C<0> are no-ops:
- $ctx = context(); # currently running context for &?BLOCK
- $ctx = context(Any); # currently running context for &?BLOCK
- $ctx = context(Any,Any); # currently running context for &?BLOCK
- $ctx = context(1); # my context's context
- $ctx = context(2); # my context's context's context
- $ctx = context(3); # my context's context's context's context
- $ctx = context(1,0,1,1); # my context's context's context's context
- $ctx = context($i); # $i'th context
+ $ctx = dynamic(); # currently running context for &?BLOCK
+ $ctx = dynamic(Any); # currently running context for &?BLOCK
+ $ctx = dynamic(Any,Any); # currently running context for &?BLOCK
+ $ctx = dynamic(1); # my context's context
+ $ctx = dynamic(2); # my context's context's context
+ $ctx = dynamic(3); # my context's context's context's context
+ $ctx = dynamic(1,0,1,1); # my context's context's context's context
+ $ctx = dynamic($i); # $i'th context
Note also that negative numbers are allowed as long as you stay within
the existing context stack:
- $ctx = context(4,-1); # my context's context's context's context
+ $ctx = dynamic(4,-1); # my context's context's context's context
Repeating any smartmatch just matches the same context again unless you
intersperse a 1 to skip the current level:
- $ctx = context(Method); # nearest context that is method
- $ctx = context(Method,Method); # nearest context that is method
- $ctx = context(Method,1,Method); # 2nd nearest method context
- $ctx = context(Method,1,Method,1) # caller of that 2nd nearest method
- $ctx = context(1,Block); # nearest outer context that is block
- $ctx = context(Sub,1,Sub,1,Sub); # 3rd nearest sub context
- $ctx = context({ .labels.any eq 'Foo' }); # nearest context labeled 'Foo'
+ $ctx = dynamic(Method); # nearest context that is method
+ $ctx = dynamic(Method,Method); # nearest context that is method
+ $ctx = dynamic(Method,1,Method); # 2nd nearest method context
+ $ctx = dynamic(Method,1,Method,1) # caller of that 2nd nearest method
+ $ctx = dynamic(1,Block); # nearest outer context that is block
+ $ctx = dynamic(Sub,1,Sub,1,Sub); # 3rd nearest sub context
+ $ctx = dynamic({ .labels.any eq 'Foo' }); # nearest context labeled 'Foo'
Note that this last potentially differs from the answer returned by
- Foo.context
+ Foo.dynamic
which returns the context of the innermost C<Foo> block in the lexical scope
-rather than the dynamic scope. A context also responds to the C<.context>
+rather than the dynamic scope. A context also responds to the C<.dynamic>
method, so a given context may be used as the basis for further navigation:
- $ctx = context(Method,1,Method);
- $ctx = context(Method).context(1).context(Method); # same
+ $ctx = dynamic(Method,1,Method);
+ $ctx = dynamic(Method).dynamic(1).dynamic(Method); # same
-You must supply args to get anywhere else, since C<.context> is
+You must supply args to get anywhere else, since C<.dynamic> is
the identity operator when called on something that is already
a C<Context>:
- $ctx = context;
- $ctx = context.context.context.context; # same
+ $ctx = dynamic;
+ $ctx = dynamic.dynamic.dynamic.dynamic; # same
The C<caller> function is special-cased to go outward just far enough
to escape from the current routine scope, after first ignoring any
inner blocks that are embedded, or are otherwise pretending to be "inline":
- &caller ::= &context.assuming({ !.inline }, 1);
+ &caller ::= &dynamic.assuming({ !.inline }, 1);
-Note that this is usually the same as C<context(&?ROUTINE,1)>,
+Note that this is usually the same as C<dynamic(&?ROUTINE,1)>,
but not always. A call to a returned closure might not even have
C<&?ROUTINE> in its dynamic scope anymore, but it still has a caller.
@@ -2250,10 +2250,10 @@
within that outer routine, where that block contains the call to
your routine.
-For either C<context> or C<caller>,
+For either C<dynamic> or C<caller>,
the returned context object supports at least the following methods:
- .context
+ .dynamic
.caller
.leave
.inline
@@ -2263,7 +2263,7 @@
.my
.hints
-The C<.context> and C<.caller> methods work the same as the functions
+The C<.dynamic> and C<.caller> methods work the same as the functions
except that they are relative to the context supplied as invocant.
The C<.leave> method can force an immediate return from the
specified context.
@@ -2277,7 +2277,7 @@
The C<.my> method provides access to the lexical namespace in effect at
the given dynamic context's current position. It may be used to look
up ordinary lexical variables in that lexical scope. It must not be
-used to change any lexical variable that is not marked as C<< context<rw> >>.
+used to change any lexical variable that is marked as readonly.
The C<.hints> method gives access to a snapshot of compiler symbols in
effect at the point of the call when the call was originally compiled.
@@ -2901,9 +2901,9 @@
trait. (All variables with a C<*> twigil are automatically marked with the
trait.
Likewise certain implicit lexicals (C<$_>, C<$/>, and C<$!>) are so marked.)
-C<< CONTEXT::<$varname> >> specifies the C<$varname> visible in the
+C<< DYNAMIC::<$varname> >> specifies the C<$varname> visible in the
innermost dynamic scope that declares the variable with the "C<is context>"
-trait.
+trait or with a name that has the C<*> twigil.
C<< MY::<$varname> >> specifies the lexical C<$varname> declared in the current
lexical scope.
Modified: docs/Perl6/Spec/S11-modules.pod
===================================================================
--- docs/Perl6/Spec/S11-modules.pod 2009-11-17 17:43:12 UTC (rev 29111)
+++ docs/Perl6/Spec/S11-modules.pod 2009-11-17 18:22:58 UTC (rev 29112)
@@ -13,8 +13,8 @@
Created: 27 Oct 2004
- Last Modified: 30 Jun 2009
- Version: 30
+ Last Modified: 17 Nov 2009
+ Version: 31
=head1 Overview
@@ -126,6 +126,8 @@
=head1 Compile-time Importation
X<use>
+[Note: the :MY forms are being rethought currently.]
+
Importing via C<use> binds into the current lexical scope by default
(rather than the current package, as in PerlĀ 5).
@@ -133,7 +135,7 @@
You can be explicit about the desired namespace:
- use Sense :MY<common> :OUR<@horse> :CONTEXT<$sensitive>;
+ use Sense :MY<common> :OUR<@horse>;
That's pretty much equivalent to:
@@ -312,13 +314,17 @@
You may also import symbols from the various pseudo-packages listed in S02.
They behave as if all their symbols are in the C<:ALL> export list:
- import CONTEXT <$IN $OUT $ERR>;
+ import PROCESS <$IN $OUT $ERR>;
import CALLER <$x $y>;
# Same as:
- # my ($IN, $OUT, $ERR) ::= ($*IN, $*OUT, $*ERR)
+ # my ($IN, $OUT, $ERR) := PROCESS::<$IN $OUT $ERR>
# my ($x, $y) := ($CALLER::x, $CALLER::y)
+[Conjecture: this section may go away, since the aliasing forms
+are not all that terrible, and it's not clear that we want the
+overhead of emulating export lists.]
+
=head1 Versioning
When at the top of a file you say something like