Author: autrijus
Date: Fri Feb 24 05:49:02 2006
New Revision: 7839
Modified:
doc/trunk/design/syn/S02.pod
doc/trunk/design/syn/S04.pod
doc/trunk/design/syn/S06.pod
Log:
* Textual cleanup of S2/4/6. No functional changes.
- Change sentences like "Perl 6 will support" to "Perl 6 supports"
- References to A* becomes S0*.
- Make it clear that "::Foo.bar()" does not interpolate in strings.
- The ".each" in S06 was actually a thinko for ".map".
Modified: doc/trunk/design/syn/S02.pod
==============================================================================
--- doc/trunk/design/syn/S02.pod (original)
+++ doc/trunk/design/syn/S02.pod Fri Feb 24 05:49:02 2006
@@ -111,22 +111,23 @@ be trivial to declare them as a macro).
=item *
In support of OO encapsulation, there is a new fundamental datatype:
-"opaque". External access to opaque objects is always through method
+B<opaque>. External access to opaque objects is always through method
calls, even for attributes.
=item *
-Perl 6 will have an optional type system that helps you write safer
+Perl 6 has an optional type system that helps you write safer
code that performs better. The compiler is free to infer what type
information it can from the types you supply, but will not complain
about missing type information unless you ask it to.
=item *
-Perl 6 will support the notion of "properties" on various kinds of
+Perl 6 supports the notion of B<properties> on various kinds of
objects. Properties are like object attributes, except that they're
managed by the individual object rather than by the object's class.
-According to A12, properties are actually implemented by a
+
+According to S12, properties are actually implemented by a
kind of mixin mechanism, and such mixins are accomplished by the
generation of an individual anonymous class for the object (unless
an identical anonymous class already exists and can safely be shared).
@@ -134,7 +135,7 @@ an identical anonymous class already exi
=item *
Properties applied to compile-time objects such as variables and
-classes are also called "traits". Traits are not expected to change
+classes are also called B<traits>. Traits are not expected to change
at run time. Changing run-time properties should be done via mixin
instead, so that the compiler can optimize based on declared traits.
@@ -150,7 +151,7 @@ than in Perl 5.
A variable's type is an interface contract indicating what sorts
of values the variable may contain. More precisely, it's a promise
that the object or objects contained in the variable are capable of
-responding to the methods of the indicated "role". See A12 for more
+responding to the methods of the indicated "role". See S12 for more
about roles. A variable object may itself be bound to a container
type that specifies how the container works without necessarily
specifying what kinds of things it contains.
@@ -158,15 +159,16 @@ specifying what kinds of things it conta
=item *
You'll be able to ask for the length of an array, but it won't be
-called that, because "length" does not specify units. So
-C<.elems> is the number of array elements. (You can also
+called that, because C<length> does not specify units. So
+C<.elems> is the number of array elements. You can also
ask for the length of an array in bytes or codepoints or graphemes.
-Same for strings. There is no C<.length> on strings either.)
+The same methods apply to strings as well: there is no C<.length> on
+strings either.
=item *
C<my Dog $spot> by itself does not automatically call a C<Dog> constructor.
-The actual constructor syntax turns out to be C<my Dog $spot.=new;>,
+The actual constructor syntax turns out to be C<my Dog $spot .= new;>,
making use of the C<.=> mutator method-call syntax.
=item *
@@ -194,7 +196,7 @@ than the native type can speed it up.)
=item *
-All Object types support the "undefined" role, and may contain an
+All Object types support the C<undefined> role, and may contain an
alternate set of attributes when undefined, such as the unthrown
exception explaining why the value is undefined. Non-object types
are not required to support undefinedness, but it is an error to
@@ -209,7 +211,7 @@ used as a "kind" when the context requir
=item *
-Perl 6 will intrinsically support big integers and rationals through
+Perl 6 intrinsically supports big integers and rationals through
its system of type declarations. C<Int> automatically supports
promotion to arbitrary precision. C<Rat> supports arbitrary precision
rational arithmetic. Value types like C<int> and C<num> imply
@@ -227,10 +229,10 @@ on overflow.
=item *
-A C<Str> is a Unicode string object of some sort. A C<str> is
-a stringish view of an array of integers, and has no Unicode or
-character properties without explicit conversion to some kind of C<Str>.
-Typically it's an array of bytes serving as a buffer.
+A C<Str> is a Unicode string object. A C<str> is a stringish view of
+an array of integers, and has no Unicode or character properties without
+explicit conversion to some kind of C<Str>. Typically it's an array of bytes
+serving as a buffer.
=back
@@ -242,7 +244,7 @@ The C<$pkg'var> syntax is dead. Use C<$
=item *
-Perl 6 includes a system of "sigils" to mark the fundamental
+Perl 6 includes a system of B<sigils> to mark the fundamental
structural type of a variable:
$ scalar
@@ -275,7 +277,7 @@ and its following name or construct.
Ordinary sigils indicate normally scoped variables, either lexical
or package scoped. Oddly scoped variables include a secondary sigil
-(a "twigil") that indicates what kind of strange scoping the variable
+(a B<twigil>) that indicates what kind of strange scoping the variable
is subject to:
$foo ordinary scoping
@@ -330,7 +332,7 @@ formats for both key and value in the fi
Subscripts now consistently dereference the reference produced by
whatever was to their left. Whitespace is not allowed between a
variable name and its subscript. However, there is a corresponding
-"dot" form of each subscript (C<@foo.[1]> and C<%bar.{'a'}>) which
+B<dot> form of each subscript (C<@foo.[1]> and C<%bar.{'a'}>) which
allows optional whitespace before the dot (except when interpolating).
Constant string subscripts may be placed in angles, so C<%bar.{'a'}>
may also be written as C<< %bar<a> >> or C<< %bar.<a> >>.
@@ -353,8 +355,9 @@ context specifiers such as + for numbers
There is a need to distinguish list assignment from list binding.
List assignment works exactly as it does in Perl 5, copying the
values. There's a new C<:=> binding operator that lets you bind
-names to array and hash references without copying, just as function
-arguments are bound to formal parameters. See A6.
+names to array and hash references without copying, just as subroutine
+arguments are bound to formal parameters. See S06 for more about
+parameter binding.
=item *
@@ -404,8 +407,8 @@ insert optional whitespace before the do
=item *
-With multis, C<&foo> may not be sufficient to uniquely name a specific
-function. In that case, the type may be refined by using a
+With multiple dispatch, C<&foo> may not be sufficient to uniquely name a
+specific function. In that case, the type may be refined by using a
signature literal as a postfix operator:
&foo:(Int,Num)
@@ -422,7 +425,7 @@ This is really just a shorthand for
=item *
-Slicing syntax is covered in S9. Multidimensional
+Slicing syntax is covered in S09. Multidimensional
slices will be done with semicolons between individual slice subscripts.
Each such slice is evaluated lazily.
@@ -481,12 +484,6 @@ are aliases into the C<$/> object.
The C<$#foo> notation is dead. Use C<@foo.end> or C<[-1]> instead.
(Or C<@foo.shape[$dimension]> for multidimensional arrays.)
-=item *
-
-A2 proposes C<$(...)> and C<@(...)> to interpolate arbitrary
-expressions, but these have been replaced with interpolation of curlies
-(closures).
-
=back
=head1 Names
@@ -676,8 +673,8 @@ matters type names and package names are
Typeglobs are gone. Use binding (C<:=> or C<::=>) to do aliasing.
Individual variable objects are still accessible through the
hash representing each symbol table, but you have to include the
-sigil in the variable name now: C<MyPackage::{'$foo'}> (or also
-C<< MyPackage::<$foo> >> these days).
+sigil in the variable name now: C<MyPackage::{'$foo'}> or the
+equivalent C<< MyPackage::<$foo> >>.
=item *
@@ -870,7 +867,7 @@ as they would outside the string, that i
:16<dead_beef> * 16**8
:16<dead_beef*16**8>
-It's true that only radixes that define 'e' as a digit are ambiguous that
+It's true that only radixes that define C<e> as a digit are ambiguous that
way, but with any radix it's not clear whether the exponentiator should
be 10 or the radix, and this makes it explicit:
@@ -1020,13 +1017,27 @@ just have to embed your construct inside
Bare scalar variables always interpolate in double-quotish
strings. Bare array, hash, and subroutine variables may I<never> be
-interpolated. However, any sigiled variable may start an interpolation
-if it is followed by a sequence of one or more bracketed dereferencers:
-that is, any of 1) an array subscript, 2) a hash subscript, 3) a set
-of parentheses indicating a function call, 4) any of 1 through 3 in
-their "dot" form, 5) a dot-form method call that includes argument
-parentheses, or 6) a sequence of one or more unparenthesized method
-call if followed by any of 1 through 5. In other words, this is legal:
+interpolated. However, any scalar, array, hash or subroutine variable may
+start an interpolation if it is followed by a sequence of one or more bracketed
+dereferencers: that is, any of:
+
+=over 4
+
+=item 1. An array subscript
+
+=item 2. A hash subscript
+
+=item 3. A set of parentheses indicating a function call
+
+=item 4. Any of 1 through 3 in their B<dot> form
+
+=item 5. A method call that includes argument parentheses
+
+=item 6. A sequence of one or more unparenthesized method call, followed by
any of 1 through 5
+
+=back
+
+In other words, this is legal:
"Val = $a.ord.as('%x')\n"
@@ -1172,7 +1183,7 @@ And so on.
=item *
Backslash sequences still interpolate, but there's no longer any C<\v>
-to mean "vertical tab", whatever that is... (C<\v> now match vertical
+to mean I<vertical tab>, whatever that is... (C<\v> now match vertical
whitespace in a rule.)
=item *
@@ -1452,7 +1463,7 @@ are the same as:
In contrast to assignment, binding to a hash requires a C<Hash> (or
C<Pair>) reference. Binding to a "splat" hash requires a list of pairs
or hashes, and stops processing the argument list when it runs out
-of pairs or hashes. See S6 for much more about parameter binding.
+of pairs or hashes. See S06 for much more about parameter binding.
=back
@@ -1497,7 +1508,7 @@ as ordinary named arguments.
=item *
-Properties work as detailed in A12. They're actually object
+Properties work as detailed in S12. They're actually object
attributes provided by role mixins. Compile-time properties applied
to containers and such still use the C<is> keyword, but are now called
"traits". On the other hand, run-time properties are attached to
Modified: doc/trunk/design/syn/S04.pod
==============================================================================
--- doc/trunk/design/syn/S04.pod (original)
+++ doc/trunk/design/syn/S04.pod Fri Feb 24 05:49:02 2006
@@ -47,7 +47,7 @@ placeholder argument:
$func("printme");
In any case, all formal parameters are the equivalent of C<my> variables
-within the block. See S6 for more on function parameters.
+within the block. See S06 for more on function parameters.
Except for such formal parameter declarations, all lexically scoped
declarations are visible from the point of declaration to the end of
@@ -654,7 +654,7 @@ since C<< prefix:<if>> > would hide C<<
=head1 Smart matching
Here is the current table of smart matches (which probably belongs in
-S3). The list is intended to reflect forms that can be recognized at
+S03). The list is intended to reflect forms that can be recognized at
compile time. If none of these forms is recognized at compile time, it
falls through to do MMD to C<< infix:<~~>() >>, which presumably
reflects similar semantics, but can finesse things that aren't exact
Modified: doc/trunk/design/syn/S06.pod
==============================================================================
--- doc/trunk/design/syn/S06.pod (original)
+++ doc/trunk/design/syn/S06.pod Fri Feb 24 05:49:02 2006
@@ -860,11 +860,11 @@ produces [0,'a'],[1,'b'],[2,'c']. If yo
use C<each()> instead:
(0..2; 'a'..'c') ==> my @;tmp;
- for @;tmp.each { say }
+ for @;tmp.map { say }
and then you just get 0,'a',1,'b',2,'c'. This is good for
- for @;tmp.each -> $i, $a { say "$i: $a" }
+ for @;tmp.map -> $i, $a { say "$i: $a" }
In list context the C<@;foo> notation is really a shorthand for C<[;](@;foo)>.
@@ -914,11 +914,11 @@ which is the same as
Note that the each method is also sensitive to multislicing, so you
could also just write that as:
- (@foo; 0...).each: -> $x, $i { ...}
+ (@foo; 0...).map: -> $x, $i { ...}
Also note that these come out to identical for ordinary arrays:
- @foo.each
+ @foo.map
@foo.cat
=head2 Closure parameters
@@ -1252,7 +1252,7 @@ A value type on an array or hash specifi
my Rat %ship; # the value of each entry stores a Rat
-The key type of a hash may be specified as a shape trait--see S9.
+The key type of a hash may be specified as a shape trait--see S09.
=head2 Implementation types