Author: lwall
Date: 2010-01-21 18:24:54 +0100 (Thu, 21 Jan 2010)
New Revision: 29571

[S03,S07] bring list assignment descriptions into better alignment for 

Modified: docs/Perl6/Spec/S03-operators.pod
--- docs/Perl6/Spec/S03-operators.pod   2010-01-21 13:34:35 UTC (rev 29570)
+++ docs/Perl6/Spec/S03-operators.pod   2010-01-21 17:24:54 UTC (rev 29571)
@@ -15,8 +15,8 @@
     Created: 8 Mar 2004
-    Last Modified: 20 Jan 2010
-    Version: 184
+    Last Modified: 21 Jan 2010
+    Version: 185
 =head1 Overview
@@ -2004,13 +2004,15 @@
 are scalar destinations on the left or already-computed values on
 the right.  However, many list lvalues end with an array destination
 (where assignment directly to an array can be considered a degenerate
-case).  When copying into an array destination, the list assignment
-continues to copy in known values immediately, but suspends when it
-hits an actively iterating iterator (but not one merely passed as an
-object within the list).  The array location on the left is then set
-up as a self-extending array, with the remainder of the list on the
-right as the "specs" for its remaining values, to be reified on
-demand.  Hence it is legal to say:
+case).  When copying into an array destination, the list assignment is
+"mostly eager"; it requests the list to evaluate its leading iterators
+(and values) to the extent that they are known to be finite, and
+then suspend, returning the known values.  The assignment then copies
+the known values into the array.  (These two steps might actually be
+interleaved depending on how the iterator API ends up being defined.)
+It then sets up the array to be self-extending by using the remainder
+of the list as the "specs" for the array's remaining values, to be
+reified on demand.  Hence it is legal to say:
     @natural = 0..*;

Modified: docs/Perl6/Spec/S07-iterators.pod
--- docs/Perl6/Spec/S07-iterators.pod   2010-01-21 13:34:35 UTC (rev 29570)
+++ docs/Perl6/Spec/S07-iterators.pod   2010-01-21 17:24:54 UTC (rev 29571)
@@ -14,8 +14,8 @@
     Created: 27 Nov 2008
-    Last Modified: 20 Apr 2009
-    Version: 5
+    Last Modified: 21 Jan 2010
+    Version: 6
 =head1 Laziness and Eagerness
@@ -87,6 +87,16 @@
 will be eagerly evaluated.
+Despite the fact that "mostly eager" treats some iterators as potentially
+infinite, a list assignment to multiple targets forces evaluation (by demand)
+of enough of the list to fill any scalar destinations before a final "slurpy"
+destination.  Hence:
+    ($a, $b, @c) = 1..*;
+takes the lazy iterator returned by the right side and forces it to divulge
+a C<1> and a C<2> before setting up C<@c> to mean C<3..*> lazily.
 =item Feed operators: my @a <== @something;
 The feed operator is strictly lazy, meaning that no operation should

Reply via email to