Author: lwall Date: 2009-11-20 05:34:57 +0100 (Fri, 20 Nov 2009) New Revision: 29141
Modified: docs/Perl6/Spec/S06-routines.pod docs/Perl6/Spec/S09-data.pod Log: [S06,S09] rename 'is ref' to 'is parcel' and make it synonymous with \ Modified: docs/Perl6/Spec/S06-routines.pod =================================================================== --- docs/Perl6/Spec/S06-routines.pod 2009-11-20 04:31:36 UTC (rev 29140) +++ docs/Perl6/Spec/S06-routines.pod 2009-11-20 04:34:57 UTC (rev 29141) @@ -16,8 +16,8 @@ Created: 21 Mar 2003 - Last Modified: 12 Nov 2009 - Version: 123 + Last Modified: 19 Nov 2009 + Version: 124 This document summarizes Apocalypse 6, which covers subroutines and the new type system. @@ -480,9 +480,9 @@ If you have a readonly parameter C<$ro>, it may never be passed on to a C<rw> parameter of a subcall, whether or not C<$ro> is currently bound to a mutable object. It may only be rebound to readonly or -copy parameters. It may also be rebound to a C<ref> parameter (see -"C<is ref>" below), but modification will fail as in the case where -an immutable value is bound to a C<ref> parameter. +copy parameters. It may also be rebound to a parcel parameter (see +"C<is parcel>" below), but modification will fail as in the case where +an immutable value is bound to a C<parcel> parameter. Aliases of C<$ro> are also readonly, whether generated explicitly with C<:=> or implicitly within a C<Capture> object (which are themselves immutable). @@ -1593,7 +1593,7 @@ other placeholders or signature. Any bare block without placeholders really has a parameter like this: - -> $_ is ref = OUTER::<$_> { .mumble } + -> \$_ = OUTER::<$_> { .mumble } (However, statement control C<if> notices this and passes no argument, so C<$_> ends up being bound to the outer C<$_> anyway.) @@ -1997,14 +1997,28 @@ (The variadic array as a whole is always modifiable, but such modifications have no effect on the original argument list.) -=item C<is ref> +=item C<is parcel> -Specifies that the parameter is passed by reference (that is, -as an C<Object>). You may modify the argument, but only if -argument is already a suitable lvalue. Unlike C<rw>, no attempt -at autovivification is made, so unsuitable lvalues will throw an -exception if you try to modify them within the body of the routine. +Specifies that the parameter is passed as a "parcel", that is, as a +raw reference to a "parenthetical cell" or "parse list", an argument +object that has not yet had a context imposed. (It may or may not +actually be of the C<Parcel> type, since a C<Parcel> containing only +one object automatically unwraps itself to be that object directly.) +In other words, this provides for lazy contextualization even through +function calls. This is important if you wish to pass the parameter +onward to something else that will determine its context later. +You may modify the argument, but only if argument is already a suitable +lvalue since, unlike C<rw>, no attempt at autovivification is made, +so unsuitable lvalues will throw an exception if you try to modify +them within the body of the routine. That is, if autovivification +happens, it happens at the point of use, not at the point of binding. + +For better visual distinction, such a parameter is declared by +prefixing with a backslash rather than by using C<is parcel> directly. +The backslash is also more succint; the trait is there primarily +for introspection. + =item C<is copy> Specifies that the parameter receives a distinct, read-writable copy of the @@ -2039,9 +2053,9 @@ readonly True if the parameter has C<is readonly> trait rw True if the parameter has C<is rw> trait copy True if the parameter has C<is copy> trait - ref True if the parameter has C<is ref> trait named True if the parameter is to be passed named named_names List of names a named parameter can be passed as + parcel True if the parameter is too lazy to contextualize slurpy True if the parameter is slurpy optional True if the parameter is optional default A closure returning the default value Modified: docs/Perl6/Spec/S09-data.pod =================================================================== --- docs/Perl6/Spec/S09-data.pod 2009-11-20 04:31:36 UTC (rev 29140) +++ docs/Perl6/Spec/S09-data.pod 2009-11-20 04:34:57 UTC (rev 29141) @@ -829,7 +829,7 @@ Within any kind of bracketing construct, semicolon notionally separates the sublists of a multidimensional slice, the interpretation of which depends on the context. Such a semicolon list puts each of its -sublists into a C<Capture>, deferring the context of the sublist until +sublists into a C<Parcel>, deferring the context of the sublist until it is bound somewhere. The storage of these sublists is hidden in the inner workings of the list. It does not produce a list of lists unless the list as a whole is bound into a slice context. @@ -1245,8 +1245,8 @@ Note that assignment is treated the same way as binding to a copy container, so it does not autovivify its right side either. -Any mention of an expression within a C<Capture> delays the autovivification -decision to binding time. (Binding to a "ref" parameter also defers the +Any mention of an expression within a C<Parcel> delays the autovivification +decision to binding time. (Binding to a parcel parameter also defers the decision.) This is as opposed to PerlĀ 5, where autovivification could happen @@ -1267,8 +1267,8 @@ my $val := %hash<foo><bar>; my @array; - my $cap = \...@array[0][0]; # $cap is a Capture object - see S02 - my :($obj) := $cap; # @array[0][0] created here + my $parcel = \...@array[0][0]; # $parcel is a Parcel object - see S02 + my :($obj) := $parcel; # @array[0][0] created here my @array; foo(@array[0][0]);