Author: lwall
Date: 2009-02-24 05:36:33 +0100 (Tue, 24 Feb 2009)
New Revision: 25513

Modified:
   docs/Perl6/Spec/S02-bits.pod
   docs/Perl6/Spec/S03-operators.pod
   docs/Perl6/Spec/S12-objects.pod
   docs/Perl6/Spec/S16-io.pod
   docs/Perl6/Spec/S28-special-variables.pod
Log:
kill DEF* variants


Modified: docs/Perl6/Spec/S02-bits.pod
===================================================================
--- docs/Perl6/Spec/S02-bits.pod        2009-02-24 04:11:42 UTC (rev 25512)
+++ docs/Perl6/Spec/S02-bits.pod        2009-02-24 04:36:33 UTC (rev 25513)
@@ -1409,14 +1409,14 @@
 is subject to:
 
     $foo        ordinary scoping
-    $.foo       object attribute accessor
+    $.foo       object attribute public accessor
     $^foo       self-declared formal positional parameter
     $:foo       self-declared formal named parameter
     $*foo       contextualizable global variable
     $?foo       compiler hint variable
     $=foo       pod variable
     $<foo>      match variable, short for $/{'foo'}
-    $!foo       explicitly private attribute (mapped to $foo though)
+    $!foo       object attribute private storage (mapped to $foo though)
 
 Most variables with twigils are implicitly declared or assumed to
 be declared in some other scope, and don't need a "my" or "our".

Modified: docs/Perl6/Spec/S03-operators.pod
===================================================================
--- docs/Perl6/Spec/S03-operators.pod   2009-02-24 04:11:42 UTC (rev 25512)
+++ docs/Perl6/Spec/S03-operators.pod   2009-02-24 04:36:33 UTC (rev 25513)
@@ -2840,6 +2840,13 @@
 By default C<min> and C<max> use C<cmp> semantics.  As with all C<cmp>-based
 operators, this may be modified by an adverb specifying different semantics.
 
+=item *
+
+Note that, like most other operators, a comparison naturally throws
+an exception if either of its arguments is undefined.  However,
+various parallelizable contexts such as sort and hyper suppress this,
+er, somehow.
+
 =back
 
 =head1 Range semantics

Modified: docs/Perl6/Spec/S12-objects.pod
===================================================================
--- docs/Perl6/Spec/S12-objects.pod     2009-02-24 04:11:42 UTC (rev 25512)
+++ docs/Perl6/Spec/S12-objects.pod     2009-02-24 04:36:33 UTC (rev 25513)
@@ -1298,6 +1298,11 @@
     my enum Day ['Sun','Mon','Tue','Wed','Thu','Fri','Sat'];
     my enum Day <Sun Mon Tue Wed Thu Fri Sat>;
 
+For any enum value the C<.perl> method will return its long name.
+A numeric enum value numifies to its numeric value and stringifies to its 
short name.
+A string enum value has no special numeric value, and stringifies to its 
string value
+rather than its name. [XXX inconsistent]
+
 If the first value is unspecified, it defaults to 0.  To specify the
 first value, use pair notation (see below).
 

Modified: docs/Perl6/Spec/S16-io.pod
===================================================================
--- docs/Perl6/Spec/S16-io.pod  2009-02-24 04:11:42 UTC (rev 25512)
+++ docs/Perl6/Spec/S16-io.pod  2009-02-24 04:36:33 UTC (rev 25513)
@@ -13,8 +13,8 @@
                 Tim Nelson <wayl...@wayland.id.au>
                 Daniel Ruoso <dan...@ruoso.com>
  Date:          12 Sep 2006
- Last Modified: 19 Feb 2009
- Version:       20
+ Last Modified: 23 Feb 2009
+ Version:       21
 
 This is a draft document. Many of these functions will work as in Perl
 5, except we're trying to rationalize everything into roles.  For
@@ -24,23 +24,47 @@
 corresponding global function, it's merely an exported version of
 the method.
 
-=head1 Default IO handles
+=head1 Overridable IO handles
 
-In Perl 6, there are the I<standard> handles, and the I<default> handles.  
+In Perl 6, there are the I<standard> IO handles, and any number of overriding
+inner filehandles for the same symbol.  
 
-The I<standard> ones are our old familiar friends (with new names).  Standard 
input 
-changed from STDIN to C<$*IN>, standard output changed from STDOUT to 
C<$*OUT>, and 
-standard error changed from STDERR to C<$*ERR>.  
+The I<standard> handles are our old familiar friends (with new names).
+Standard input changed from STDIN to C<$*IN>, standard output changed
+from STDOUT to C<$*OUT>, and standard error changed from STDERR to
+C<$*ERR>.  In Perl 6 these symbols represent more of a concept than
+a given filehandle, since the meaning is contextually determined.
+The process's version of these handles live in the C<PROCESS::>
+namespace, which is more global than the per-interpreter C<GLOBAL::>
+namespace.
 
-However, the I<default> ones replace the single handle set by the Perl 5 
select() call 
-with with three new variables.  
-At the start of the program, the default handles (C<$*DEFIN>, C<$*DEFOUT>, and 
-C<$*DEFERR>) are aliased to the standard handles, but may be temporarily or 
permanently 
-rebound to some other file handle.  
+When no explicit filehandle is used, the standard IO operators are
+defined in terms of the contextual variables.  So the C<print> function
+prints to C<$*OUT>, while C<warn> warns to C<$*ERR>.  The C<< =<> >>
+term inputs from C<$*IN>.  So any given dynamic scope (interpreter,
+thread, function or method call) may redefine the current meaning of
+any of those filehandles within the dynamic scope of itself and of
+its called routines.
 
-Many of the roles and functions below will operate on the default handles.  To 
set all 3 
-at once, do C<($*DEFIN, $*DEFOUT, $*DEFERR) ::= ($*IN, $*OUT, $*ERR)>.  
+So to put it another way, when you write something like
 
+    say "Howdy, world!"
+
+the C<say> function looks for the current meaning of C<$*OUT>, and
+takes the closest definition it can find in its callers.  If none
+of the callers have overridden the definition, it looks in the
+interpreter's C<GLOBAL> namespace.  If the interpreter hasn't overridden
+the meaning, it takes the meaning from C<PROCESS>.  In essence, any
+dynamic scope in Perl 6 is allowed to do IO redirection much like
+a Unix shell does with its subprocesses, albeit with a different
+syntax:
+
+    {
+       temp $*OUT = open $newfile, :w;
+       foo() # all stdout goes to $newfile
+    }
+    # stdout reverts to outer scope's definition
+
 =head1 Roles and Classes
 
 The roles and classes that define most of the functionality for IO are defined 
in 

Modified: docs/Perl6/Spec/S28-special-variables.pod
===================================================================
--- docs/Perl6/Spec/S28-special-variables.pod   2009-02-24 04:11:42 UTC (rev 
25512)
+++ docs/Perl6/Spec/S28-special-variables.pod   2009-02-24 04:36:33 UTC (rev 
25513)
@@ -9,7 +9,7 @@
  Contributions: Tim Nelson <wayl...@wayland.id.au>
  Date:          23 Feb 2009, created from miscellaneous documents lying around
  Last Modified: 23 Feb 2009
- Version:       1
+ Version:       2
 
 =head1 Introduction
 
@@ -23,53 +23,45 @@
 Perl 5 variable(s). The list of main entries is also followed by 
 a table showing the 5 and 6 variables side-by-side.
 
-Most/All variables of the form $*SOMETHING should also work in the form
-$SOMETHING (without the '*') unless masked by "my $SOMETHING".
-
 =head1 Overview
 
 =head2 Secondary Sigils (also known as "twigils"):
 
-    $+   # currently compiling scope (see S02)
-    $?   # lexically-scoped (compile time, see S02)
-    $*   # global (run time, see S02)
-    $=   # file-scoped (see S02)
-    $^   # implicit block argument (see S06 placeholder variables)
+    $?   # constants (variable only at compile time, see S02)
+    $*   # context variables and globals (run time, see S02)
+    $=   # pod documents, file-scoped (see S02)
+    $^   # self-declaring block positional parameter (see S06 placeholder 
variables)
+    $:   # self-declaring block named parameter (see S06 placeholder variables)
     $<   # current $/ scope (see S02)
-    $.   # public attribute (see S12 attributes)
-    $!   # private attribute (see S12 attributes)
+    $.   # public attribute accessor (see S12 attributes)
+    $!   # private attribute storage (see S12 attributes)
 
 
 =head2 Named variables (see S02):
 
-    $/             # match object from last rule (see S05)
-    $0             # first captured value from match: $/.[0]
+    $/             # match object from last match (see S05)
+    $0             # first captured value from match: $/[0]
     @*ARGS         # command-line arguments
     &?BLOCK        # current block (itself, see S06)
     @?BLOCK        # current blocks (themselves, see S06)
-    $?BLOCKLABEL   # label of current block (see S06) 
-                   #   XXX redundant with $?LABEL?
     ::?CLASS       # current class (as package name)
     $?CLASS        # current class (as variable)
     @?CLASS        # current classes
     %?CONFIG      # configuration hash
     $=DATA         # data block handle (=begin DATA ... =end)
-    $*DEFIN        # Default input file handle (see S16)
-    $*DEFOUT       # Default output file handle (see S16)
-    $*DEFERR       # Default error file handle (see S16)
     $*EGID         # effective group id
     %*ENV          # system environment
     $*ERR          # standard error handle (see S16)
     $*EUID         # effective user id
     $*EXECUTABLE_NAME    # executable name
-    $?FILE         # current file
+    $?FILE         # current filename of source file
     $?GRAMMAR      # current grammar
     @?GRAMMAR      # current grammars
     $*GID          # group id
     $*IN           # standard input handle (see S16)
     $?LABEL        # label of current block
     @?LABEL        # labels of current blocks
-    $?LINE         # current line
+    $?LINE         # current line number in source file
     $?MODULE       # current module
     @?MODULE       # current modules
     $?OS           # operating system compiled for
@@ -84,9 +76,6 @@
     $*PERLVER      # perl version running under
     $*PROGRAM_NAME # name of the program being executed
     $*PID          # system process id
-    $?PUGS_VERSION # Pugs version (not canonical)
-    $*PUGS_HAS_HSPLUGINS # True if Pugs was compiled with support for hsplugins
-                         # (not canonical)
     ::?ROLE        # current role (as package name)
     $?ROLE         # current role (as variable)
     @?ROLE         # current roles
@@ -94,12 +83,17 @@
     @?ROUTINE      # current subs or methods (themselves)
     $*UID          # system user id
 
-There were threads on p6l about unifying all variables which concern the OS or
-the VM ($*UID, $*PROGRAM_NAME, etc.) into two variables, $?ENV (compile-time
-environment) and $*ENV (runtime environment). Larry did like the idea, but
-"ENV" is probably to overloaded to mean the hash of environment variables
-(which would be found under $*ENV.environment or some-such).
 
+Note that contextual variables such as C<$*OUT> may have more than
+one current definition in the outer dynamic context, in which case
+the innermost dynamic scope determines the meaning.  For instance,
+C<$PROCESS::OUT> is the stdout for the entire process, but each
+interpreter can set its own C<$GLOBAL::OUT> to make C<$*OUT> mean
+whatever it wants independently of other interpreters.  Any dynamic
+scope may also declare a local meaning of C<$*OUT> that applies only
+to called code.  Likewise each thread could log its own errors
+to its own C<$*ERR>, since a thread is a dynamic scope.
+
 =head1 Special Variables
 
 This section only lists variables that don't have a "See S16" or suchlike next 
to them in 

Reply via email to