[svn:perl6-synopsis] r14413 - doc/trunk/design/syn

2007-06-02 Thread larry
Author: larry
Date: Sat Jun  2 12:42:11 2007
New Revision: 14413

Modified:
   doc/trunk/design/syn/S02.pod
   doc/trunk/design/syn/S03.pod
   doc/trunk/design/syn/S04.pod
   doc/trunk/design/syn/S06.pod
   doc/trunk/design/syn/S09.pod
   doc/trunk/design/syn/S13.pod

Log:
Dropped : from all listop contextualizers, whether sigil and typename.
The @@ contextualizer is now also named slice.
Consistent with that, we have regularized slice nomenclature:
* A slice now always refers to the whole multidimensional subscript,
or the list of lists corresponding to that.
* We now try to avoid calling the individual sublists slices.
* The parameter to a subscript is *@@slice, not *@@slices.
* The term multislice is now deemed redundant.


Modified: doc/trunk/design/syn/S02.pod
==
--- doc/trunk/design/syn/S02.pod(original)
+++ doc/trunk/design/syn/S02.podSat Jun  2 12:42:11 2007
@@ -12,9 +12,9 @@
 
   Maintainer: Larry Wall [EMAIL PROTECTED]
   Date: 10 Aug 2004
-  Last Modified: 29 May 2007
+  Last Modified: 2 Jun 2007
   Number: 2
-  Version: 108
+  Version: 109
 
 This document summarizes Apocalypse 2, which covers small-scale
 lexical items and typological issues.  (These Synopses also contain
@@ -446,8 +446,11 @@
 $spot.defined;  # False
 say $spot;  # Dog
 
-Any class name used as a value by itself is an undefined instance of that
-class's prototype.  See S12 for more on that.
+Any class name used as a value by itself is an undefined instance of
+that class's prototype, or Iprotoobject.  See S12 for more on that.
+(Any type name in rvalue context is parsed as a list operator
+indicating a typecast, but an argumentless one of these degenerates
+to a typecast of undef, producing the protoobject.)
 
 To get a real CDog object, call a constructor method such as Cnew:
 
@@ -1059,7 +1062,7 @@
 %   unordered hash (associative array)
code/rule/token/regex
 ::  package/module/class/role/subset/enum/type/grammar
-@@  multislice view of @
+@@  slice view of @
 
 Within a declaration, the C sigil also declares the visibility of the
 subroutine name without the sigil within the scope of the declaration:
@@ -1324,9 +1327,9 @@
 
 =item *
 
-Slicing syntax is covered in S09.  Multidimensional
-slices will be done with semicolons between individual slice subscripts.
-Each such slice is evaluated lazily.
+Slicing syntax is covered in S09.  A multidimensional
+slice will be done with semicolons between individual slice sublists.
+Each such slice sublist is evaluated lazily.
 
 =item *
 
@@ -1422,9 +1425,17 @@
 than a punctuational variable.  This allows you to use sigils as coercion
 operators:
 
-print $( foo() )
+print $( foo() )# foo called in item context
+print @@( foo() )   # foo called in slice context
 
-It also allows the use of bare sigils as placeholders for anonymous variables:
+The bare sigil is parsed as a list operator in rvalue context, so
+these mean the same thing:
+
+print $ foo()   # foo called in item context
+print @@ foo()  # foo called in slice context
+
+In declarative contexts bare sigils may be used as placeholders for
+anonymous variables:
 
 my ($a, $, $c) = 1..3;
 print unless (state $)++;

Modified: doc/trunk/design/syn/S03.pod
==
--- doc/trunk/design/syn/S03.pod(original)
+++ doc/trunk/design/syn/S03.podSat Jun  2 12:42:11 2007
@@ -12,9 +12,9 @@
 
   Maintainer: Larry Wall [EMAIL PROTECTED]
   Date: 8 Mar 2004
-  Last Modified: 29 May 2007
+  Last Modified: 2 Jun 2007
   Number: 3
-  Version: 115
+  Version: 116
 
 =head1 Overview
 
@@ -729,16 +729,6 @@
 Note that, unlike in Perl 5, you must use the C.meth forms to default
 to C$_ in Perl 6.
 
-=item *
-
-The Citem contextualizer
-
-item
-
-The new name for Perl 5's Cscalar contextualizer.  Equivalent to C$().
-We still call the values scalars, and talk about scalar operators, but
-scalar operators are those that put their arguments into item context.
-
 =back
 
 =head2 Nonchaining binary precedence
@@ -1297,40 +1287,80 @@
 
 Sigils as contextualizer listops
 
-$:
-@:
-%:
-:
-@@:
+Sigil   Alpha variant
+-   -
+$   item
+@   list
+@@  slice
+%   hash
 
 As listops, these look like terms from the left, but raise their
 precedence on the right sufficiently to govern list infix
 operators:
 
- $: 1,2 Z 3,4   # [[1,3],[2,4]]
- @: 1,2 Z 3,4   # 1,3,2,4
-@@: 1,2 Z 3,4   # [1,3],[2,4]
- %: 1,2 Z 3,4   # { 1 = 3, 2 = 4 }
-
- $: 1,2 X 3,4  # [[1,3],[1,4],[2,3],[2,4]]
- @: 1,2 X 3,4  # 1,3,1,4,2,3,2,4
-@@: 1,2 X 3,4  # [1,3],[1,4],[2,3],[2,4]
+ $ 1,2 Z 3,4   # [\(1,3),\(2,4)]
+ @ 1,2 Z 3,4   # 1,3,2,4
+@@ 1,2 

[svn:perl6-synopsis] r14414 - doc/trunk/design/syn

2007-06-02 Thread larry
Author: larry
Date: Sat Jun  2 14:45:43 2007
New Revision: 14414

Modified:
   doc/trunk/design/syn/S03.pod

Log:
First installment of filling out descriptions of operator semantics.


Modified: doc/trunk/design/syn/S03.pod
==
--- doc/trunk/design/syn/S03.pod(original)
+++ doc/trunk/design/syn/S03.podSat Jun  2 14:45:43 2007
@@ -97,21 +97,40 @@
 
 =item *
 
+Heredoc
+
+qq:to/END/
+Dear $recipient:
+Thanks!
+Sincerely,
+$me
+END
+
+=item *
+
 Array composer
 
 [1,2,3]
 
+Provides list context inside.
+
 =item *
 
 Hash composer
 
 { a = 42 }
 
+Inside must be a list of pairs, otherwise you must use Chash()
+or C%() instead.
+
 =item *
 
 Closure
 
-{...}
+{ ... }
+
+When found where a statement is expected, executes immediately.  Othewise
+always defers evaluation of the inside scope.
 
 =item *
 
@@ -119,6 +138,8 @@
 
 \(@a,$b,%c)
 
+An abstraction representing an argument list that doesn't yet know its context.
+
 =item *
 
 Sigiled variables
@@ -128,7 +149,7 @@
 %z
 $^a
 $?FILE
-@@multidim
+@@slice
 func
 div:(Int, Int -- Int)
 
@@ -247,6 +268,9 @@
 $obj.::Class::meth
 $obj.Class::meth# same thing, assuming Class is predeclared
 
+As in Perl 5, tells the dispatcher which class to start searching from,
+not the exact method to call.
+
 =item *
 
 Mutating method call
@@ -286,7 +310,7 @@
 
 Dotted postfix form of any other prefix operator
 
-$x.'++'   # prefix:++($x), fallback to postfix:++
+$x.:++   # prefix:++($x)
 
 =back
 
@@ -396,79 +420,109 @@
 
 prefix:?, boolean context
 
-?
+?$x
 
+Evaluates the expression as a boolean and returns CTrue if expression
+is true or CFalse otherwise.
 See true below for a low-precedence alternative.
 
 =item *
 
 prefix:!, boolean negation
 
-!
+!$x
 
+Returns the opposite of what C? would.
 See not below for a low-precedence alternative.
 
 =item *
 
 prefix:+, numeric context
 
-+
++$x
+
+Unlike in Perl 5, where C+ is a no-op, this operator coerces
+to numeric context in Perl 6.  (It coerces only the value, not the
+original variable.)  The narrowest appropriate type of CInt, CNum,
+or CComplex will be returned.  A string containing two integers
+separated by a C/ will be returned as a CRat.  Exponential notation
+and radix notations are recognized.
 
 =item *
 
 prefix:-, numeric negation
 
--
+-$x
+
+Coerces to numeric and returns the negation of the resulting number.
 
 =item *
 
 prefix:~, string context
 
-~
+~$x
+
+Coerces the value to a string.  (It only coerces the value, not the
+original variable.)
 
 =item *
 
 prefix:|, flatten object into arglist
 
-|
+| $capture
+
+Interpolates the contents of the CCapture (or CCapture-like) value
+into the current argument list as if they had been specified literally.
 
 =item *
 
 prefix:+^, numeric bitwise negation
 
-+^
++^$x
+
+Coerces to numeric and then does bitwise negation on the number.
 
 =item *
 
 prefix:~^, string bitwise negation
 
-~^
+~^$x
+Coerces to string buffer and then does bitwise negation on each element.
 
 =item *
 
 prefix:?^, boolean bitwise negation
 
-?^
+?^$x
+
+Coerces to boolean and then flips the bit.  (Same as C!.)
 
 =item *
 
 prefix:\, Capture constructor
 
-\
+\$x
+[EMAIL PROTECTED]
+\%x
+\($invocant: $pos1, $pos2, :named($arg))
+
+Defers the contextualization of its argument or arguments till it is
+bound into some other context.
 
 =item *
 
 prefix:^, upto operator
 
-^
+^$limit
 
-Constructs a range or locates a metaclass.  See L/Range semantics.
+Constructs a range of C0..^$limit or locates a metaclass as a shortcut
+for C$limit.HOW.  See L/Range semantics.
 
 =item *
 
 prefix:=, iterate iterator
 
-=
+=$iterator
 
 Unary C= reads lines from a filehandle or filename, or
 iterates an iterator, or in general causes a scalar to explode its guts
@@ -491,7 +545,9 @@
 
 infix:*
 
-*
+$x*$y
+
+Multiplication, resulting in wider type of the two.
 
 =item *
 
@@ -499,7 +555,8 @@
 
 $numerator / $denominator
 
-Converts both operands to CNum and does division returning CNum.
+If either operand is of CNum type,
+converts both operands to CNum and does division returning CNum.
 If the denominator is zero, returns either C+Inf, CNaN, or C-Inf
 as the numerator is positive, zero, or negative.  (This is construed
 as the best default in light of the operator's possible use within
@@ -507,6 +564,11 @@
 on an individual scalar division, you can always check the denominator
 yourself.)
 
+If both operands are of integer type, you still get a CNum, but the
+CNum type is allowed to do the division lazily; internally it may
+store a CRat until the time a value is called for.  If converted
+to CRat directly no division ever need be done.
+
 =item *
 
 infix:div, generic 

'x' vs. 'xx'

2007-06-02 Thread Jonathan Lang

Is there any reason why we can't simply define '$a x $n' as being
shorthand for 'cat($a xx $n)'?  In what way does the former differ
from the latter, other than the use of a Whatever in place of $n?

--
Jonathan Dataweaver Lang


Re: 'x' vs. 'xx'

2007-06-02 Thread Chas Owens

On 6/2/07, Jonathan Lang [EMAIL PROTECTED] wrote:

Is there any reason why we can't simply define '$a x $n' as being
shorthand for 'cat($a xx $n)'?  In what way does the former differ
from the latter, other than the use of a Whatever in place of $n?

--
Jonathan Dataweaver Lang


$a x $n is equivalent to join '', $a xx $n, but that isn't an apt
description of its behavior.  cat($a xx *) is an attempt to provide
an infinite string since 'a' x Inf would result in memory overflow
(but the cat trick works since lists are evaluated lazily).


Re: 'x' vs. 'xx'

2007-06-02 Thread Jonathan Lang

Chas Owens wrote:

Jonathan Lang wrote:
 Is there any reason why we can't simply define '$a x $n' as being
 shorthand for 'cat($a xx $n)'?  In what way does the former differ
 from the latter, other than the use of a Whatever in place of $n?

$a x $n is equivalent to join '', $a xx $n, but that isn't an apt
description of its behavior.  cat($a xx *) is an attempt to provide
an infinite string since 'a' x Inf would result in memory overflow
(but the cat trick works since lists are evaluated lazily).


Then it looks to me like 'cat($a xx $n)' is more flexible than join
'', $a xx $n, and would work better as the baseline definition for
'$a x $n'.  Is there any reason to prefer a join-based definition to a
cat-based one?  AFAICT, the only thing that 'join' can do that 'cat'
can't is to provide a delimiter when stitching the component strings
together; in the case of 'x', this feature is (rightfully) not being
used.

--
Jonathan Dataweaver Lang