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

2006-04-01 Thread Nicholas Clark
On Sat, Apr 01, 2006 at 11:32:20AM +1100, Amos Robinson wrote:
 Sorry, I missed the boat.

Everything seems to be moving at Pugs-speed these days :-)

But what you thought was correct.

Nicholas Clark


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

2006-04-01 Thread autrijus
Author: autrijus
Date: Sat Apr  1 10:32:53 2006
New Revision: 8520

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

Log:
* S02: destill the compoments of an Arguments object, and
   specify the $() @() %() () casting forms for them.

Modified: doc/trunk/design/syn/S02.pod
==
--- doc/trunk/design/syn/S02.pod(original)
+++ doc/trunk/design/syn/S02.podSat Apr  1 10:32:53 2006
@@ -14,7 +14,7 @@
   Date: 10 Aug 2004
   Last Modified: 1 Apr 2006
   Number: 2
-  Version: 18
+  Version: 19
 
 This document summarizes Apocalypse 2, which covers small-scale
 lexical items and typological issues.  (These Synopses also contain
@@ -393,6 +393,17 @@
 bound to.  Some bindings are sensitive to multiple dimensions while
 others are not.
 
+You may cast CArguments to other types with a prefix sigil operator:
+
+$args = \3; # same as $args = \(3)
+$$args; # same as $args as Scalar or Scalar($args)
+@$args; # same as '$args as Array  or Array($args)
+%$args; # same as '$args as Hash   or Hash($args)
+$args; # same as '$args as Code   or Hash($args)
+
+Casted as an array, you can access to all positionals.  Casted as a hash, all
+nameds.  As a scalar, the invocant.  As a code, the slurpy nameless block.
+
 =item *
 
 A signature object (CSignature) may be created with coloned parens:
@@ -430,7 +441,7 @@
 foo:(Int,Num)
 
 It still just returns a function reference.  A call may also be partially
-applied by using a tuple literal as a postfix operator:
+applied by using an argument list literal as a postfix operator:
 
 foo\(1,2,3,:miceblind)
 


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

2006-04-01 Thread autrijus
Author: autrijus
Date: Sat Apr  1 10:35:35 2006
New Revision: 8522

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

Log:
* S04: Specify fail semantics in detail, and the relationship
   to the environmental $! variable.  Handling and propagation
   of unthrown exceptions clarified.

Modified: doc/trunk/design/syn/S04.pod
==
--- doc/trunk/design/syn/S04.pod(original)
+++ doc/trunk/design/syn/S04.podSat Apr  1 10:35:35 2006
@@ -12,9 +12,9 @@
 
   Maintainer: Larry Wall [EMAIL PROTECTED]
   Date: 19 Aug 2004
-  Last Modified: 28 Mar 2006
+  Last Modified: 1 Apr 2006
   Number: 4
-  Version: 11
+  Version: 12
 
 This document summarizes Apocalypse 4, which covers the block and
 statement syntax of Perl.
@@ -464,38 +464,34 @@
 =head1 Exceptions
 
 As in Perl 5, many built-in functions simply return undef when you ask
-for a value out of range, or the function fails somehow.  Unlike in
-Perl 5, these may be interesting values of undef that contain
-information about the error.  If you try to use an undefined value,
-that information can then be conveyed to the user.  In essence, undef
-can be an unthrown exception object that just happens to return 0 when
-you ask it whether it's defined or it's true.  Since C$! contains the
-current error code, saying Cdie $! will turn an unthrown exception
-into a thrown exception.  (A bare Cdie does the same.)
+for a value out of range, or the function fails somehow.  Perl 6 has
+CFailure objects, which refers to an unthrown CException object in
+C$! and knows whether it has been handled or not.
+
+If you test a CFailure for C.id, C.defined or C.true, it causes
+C$! to mark the exception as Ihandled, and acts as a harmless CUndef
+value thereafter.  Any other use of the CFailure will throw its associated
+exception immediately.
+
+Because the Cenv variable C$! contains all exceptions collected in the
+current lexical scope, saying Cdie $! will throw all exceptions,
+whether they were handled or not.  A bare Cdie/Cfail takes C$! as the
+default argument.
+
+At scope exit, C$! discards all handled exceptions from itself, then performs
+a GC check for all remaining (unhandled) exceptions.  If all of them are still
+alive (e.g. by becoming part of the return value), then they are appended to
+C CALLER::$! .  Otherwise, it calls Cdie to throw those exceptions
+as a single new exception, which may then be caught with a CCATCH block in
+the current (or caller's) scope.
 
 You can cause built-ins to automatically throw exceptions on failure using
 
 use fatal;
 
-The Cfail function responds to the caller's use fatal state.  It
+The Cfail function responds to the caller's Cuse fatal state.  It
 either returns an unthrown exception, or throws the exception.
 
-If an exception is raised while C$! already contains an exception
-that is active and unhandled, no information is discarded.  The old
-exception is pushed onto the exception stack within the new exception,
-which is then bound to C$! and, hopefully, propagated.  The default
-printout for the new exception should include the old exception
-information so that the user can trace back to the original error.
-(Likewise, rethrown exceptions add information about how the exception
-is propagated.)  The exception stack within C$! is available as
-C$![].
-
-Exception objects are born unhandled.  The C$! object keeps track of
-whether it's currently handled or unhandled.  The exception in C$! still
-exists after it has been caught, but catching it marks it as handled
-if any of the cases in the switch matched.  Handled exceptions don't
-require their information to be preserved if another exception occurs.
-
 =head1 Closure traits
 
 A CCATCH block is just a trait of the closure containing it.  Other


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

2006-04-01 Thread autrijus
Author: autrijus
Date: Sat Apr  1 10:36:25 2006
New Revision: 8523

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

Log:
* S05: $/.() is now $$/.  $() still works as $$/, and we
  have @() %() forms that maps to @$/ and %$/.

Modified: doc/trunk/design/syn/S05.pod
==
--- doc/trunk/design/syn/S05.pod(original)
+++ doc/trunk/design/syn/S05.podSat Apr  1 10:36:25 2006
@@ -13,9 +13,9 @@
 
Maintainer: Patrick Michaud [EMAIL PROTECTED]
Date: 24 Jun 2002
-   Last Modified: 25 Feb 2006
+   Last Modified: 1 Apr 2006
Number: 5
-   Version: 12
+   Version: 13
 
 This document summarizes Apocalypse 5, which is about the new regex
 syntax.  We now try to call them rules because they haven't been
@@ -1120,18 +1120,18 @@
 
 =item *
 
-When called as a closure, a Match object evaluates to its underlying
+When used as a scalar, a Match object evaluates to its underlying
 result object.  Usually this is just the entire match string, but
 you can override that by calling Creturn inside a rule:
 
-my $moose = m:{
+my $moose = $(m:{
 antler body
 { return Moose.new( body = $body().attach($antler) ) }
 # match succeeds -- ignore the rest of the rule
-}.();
+});
 
-C$() is a shorthand for C$/.() or C$/().  The result object
-may be of any type, not just a string.
+C$() is a shorthand for C$($/).  The result object may be of any type,
+not just a string.
 
 You may also capture a subset of the match as the result object using
 the C (...)  construct:
@@ -1149,8 +1149,8 @@
 
 This means that these two work the same:
 
-/ moose { $moose.() as Moose } /
-/ moose { $mooseas Moose } /
+/ moose { return $$moose as Moose } /
+/ moose { return $moose  as Moose } /
 
 =item *
 
@@ -1172,8 +1172,13 @@
 
  $mystring = { m:w/ (\S+) = (\S+)/[] };
 
+Or cast it into an array:
+
+ $mystring = @( m:w/ (\S+) = (\S+)/ );
+
 Note that, as a scalar variable, C$/ doesn't automatically flatten
-in list context.  Use C@$/ or C$/[] to flatten as an array.
+in list context.  Use C@() as a shorthand for C@($/) to flatten
+the positional captures under list context.
 
 =item *
 
@@ -1185,8 +1190,8 @@
 capture datatypes.)
 
 Note that, as a scalar variable, C$/ doesn't automatically flatten
-in list context.  Use C%$/ or C$/{} to flatten as a hash, or bind
-it to a variable of the appropriate type.
+in list context.  Use C%() as a shorthand for C%($/) to flatten as a
+hash, or bind it to a variable of the appropriate type.
 
 =item *
 


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

2006-04-01 Thread autrijus
Author: autrijus
Date: Sat Apr  1 10:43:08 2006
New Revision: 8524

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

Log:
* S06: De-mystifying the logic for named arguments.

   *$x is now just casting $x as an Arguments object.

   Differ between foo; and foo(); via zero-dimensional slices.

   Split the semantic of Undef and Failure types.

   Add a more comprehensive list of builtin classes.

   Allow named returns via the return function.

   Routine's .wrap semantic is now much clarified.

   ?SUB is renamed to ?ROUTINE; remove the $?BLOCKLABEL
   and $?SUBNAME magicals (they are now just methods);
   clarify the ?BLOCK means the immediate block, even
   if it's part of a routine.

Modified: doc/trunk/design/syn/S06.pod
==
--- doc/trunk/design/syn/S06.pod(original)
+++ doc/trunk/design/syn/S06.podSat Apr  1 10:43:08 2006
@@ -15,7 +15,7 @@
   Date: 21 Mar 2003
   Last Modified: 1 Apr 2006
   Number: 6
-  Version: 20
+  Version: 21
 
 
 This document summarizes Apocalypse 6, which covers subroutines and the
@@ -370,7 +370,6 @@
 subscript instead of the sigil.  The C: is not functioning as an
 operator here, but as a modifier of the following token:
 
-
 doit %hash:a,1,2,3;
 doit %hash:{'b'},1,2,3;
 
@@ -390,15 +389,15 @@
 C:p adverb may be placed on any hash reference to make it mean
 pairs instead of values.)
 
-Pairs are recognized syntactically at the call level and mystically
-transformed into special CNamed objects that may be bound to
-positionals only by name, not as ordinary positional CPair objects.
-Leftover special CNamed objects can be slurped into a slurpy hash.
+Pair constructors are recognized syntactically at the call level and
+put into the named slot of the CArguments structure.  Hence they may be
+bound to positionals only by name, not as ordinary positional CPair
+objects.  Leftover named arguments can be slurped into a slurpy hash.
 
 After the positional and named arguments, all the rest of the arguments
 are taken to be list arguments.  Any pairs within the list are taken
-to be list elements rather than named arguments, and mystically show
-up as CPair arguments even if the compiler marked them as CNamed.
+to be list elements rather than named arguments, and show up as CPair
+arguments even if the compiler marked them as named.
 
 It is possible that named pairs are not really a separate type; it
 would be sufficient to have a bit somewhere in the Pair that can be
@@ -498,7 +497,7 @@
 $comparison = numcmp(:y(7), :x(2));
 
 Passing the wrong number of required arguments to a normal subroutine
-is a fatal error.  Passing a NamedArg that cannot be bound to a normal
+is a fatal error.  Passing a named argument that cannot be bound to a normal
 subroutine is also a fatal error.  (Methods are different.)
 
 The number of required parameters a subroutine has can be determined by
@@ -664,11 +663,14 @@
 
 =head2 Argument list binding
 
-The underlying argument list (List) object may be bound to a single
-scalar parameter marked with a C\:
+The underlying CArguments object may be bound to a single scalar
+parameter marked with a C\.
 
-sub foo (\$args) { say $args.perl; bar.call(*$args); }
 sub bar ($a,$b,$c,:$mice) { say $mice }
+sub foo (\$args) { say $args.perl; bar.call($args); }
+
+The C.call method of CCode objects accepts a single CArguments
+object, and calls it without introducing a CCALLER frame.
 
 foo 1,2,3,:miceblind;# says \(1,2,3,:miceblind) then blind
 
@@ -685,16 +687,27 @@
 
 =head2 Flattening argument lists
 
-The unary prefix operator C* dereferences its operand (which allows
-the elements of an array or iterator or List or Tuple to be used as
-part of an argument list). The C* operator also causes its operand --
-and any subsequent arguments in the argument list -- to be evaluated in
-list context.  It also turns off syntactic recognition of named pairs.
-The eventual argument list will be parsed at call time for named pairs.
-All contiguous pairs are treated as named arguments until the first
-non-Pair, and the rest of the arguments are considered slurpy args.
-[XXX still underspecified...]
+The unary prefix operator C* casts a value to an CArguments
+object, then splices it into the argument list it occurs in.
+
+Casting CArguments to CArguments is a no-op:
+
+*(\(1, x=2));# Arguments, becomes \(1, x=2)
+
+CPair and CHash become named arguments:
+
+*(x=1);  # Pair, becomes \(x=1)
+*{x=1, y=2};# Hash, becomes \(x=1, y=2)
+
+CList (also CTuple, CRange, etc.) are simply turned into
+positional arguments:
 
+*(1,2,3); # Tuple, becomes \(1,2,3)
+*(1..3);  # Range, becomes \(1,2,3)
+*(1..2, 3);   # List, becomes \(1,2,3)
+*([x=1, x=2]);  # List (from an Array), becomes \((x=1), (x=2))
+
+For example:
 
 sub foo($x, $y, $z) {...}# expects three 

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

2006-04-01 Thread autrijus
Author: autrijus
Date: Sat Apr  1 10:43:58 2006
New Revision: 8525

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

Log:
* S11: Allow user-defined dynamic exportation with EXPORT
   routines, which assume the semantic from Damian's
   Perl6::Export::Attrs.
   
   The magical export dispatcher is now EXPORTALL.

Modified: doc/trunk/design/syn/S11.pod
==
--- doc/trunk/design/syn/S11.pod(original)
+++ doc/trunk/design/syn/S11.podSat Apr  1 10:43:58 2006
@@ -12,9 +12,9 @@
 
   Maintainer: Larry Wall [EMAIL PROTECTED]
   Date: 27 Oct 2004
-  Last Modified: 17 Mar 2006
+  Last Modified: 1 Apr 2006
   Number: 11
-  Version: 10
+  Version: 11
 
 =head1 Overview
 
@@ -105,7 +105,18 @@
 }
 
 The CFoo module will export Cfoo, Cbar and Cbaz by default;
-calling CFoo::Bar.import will import Cbar and Cbaz at runtime.
+calling CFoo::Bar.EXPORTALL will export Cbar and Cbaz at runtime
+to the caller's package.
+
+=head1 Dynamic exportation
+
+The default CEXPORTALL handles symbol exports by removing recognized
+export items and tagsets from the argument list, then calls the CEXPORT
+subroutine in that module (if there is one), passing in the remaining
+arguments.
+
+If the exporting module is actually a class, CEXPORTALL will invoke its
+CEXPORT method with the class itself as the invocant.
 
 =head1 Compile-time Importation
 
@@ -155,7 +166,7 @@
 at runtime cannot import into the lexical scope:
 
 require Sense;
-Sense.import;   # goes to the OUR scope by default, not MY
+Sense.EXPORTALL;   # goes to the OUR scope by default, not MY
 
 =head1 Importing from a pseudo-package
 


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

2006-04-01 Thread autrijus
Author: autrijus
Date: Sat Apr  1 10:44:53 2006
New Revision: 8526

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

Log:
* S12: The call form can now be used to call the next
   MMD or SMD candidate.

   A proto declaration needs to happen before multis.

   Fix a misuse of .call method.

Modified: doc/trunk/design/syn/S12.pod
==
--- doc/trunk/design/syn/S12.pod(original)
+++ doc/trunk/design/syn/S12.podSat Apr  1 10:44:53 2006
@@ -12,9 +12,9 @@
 
   Maintainer: Larry Wall [EMAIL PROTECTED]
   Date: 27 Oct 2004
-  Last Modified: 23 Feb 2006
+  Last Modified: 1 Apr 2006
   Number: 12
-  Version: 10
+  Version: 11
 
 =head1 Overview
 
@@ -542,6 +542,13 @@
 :omit(Selector) # only classes that don't match selector
 :include(Selector)  # only classes that match selector
 
+In addition to Cnext METHOD, the special function Ccall dispatches
+to the next candidate, possibly with a new argument list:
+
+call;   # calls with the original arguments
+call(); # calls with no arguments
+call(1,2,3);# calls with a different set of arguments
+
 =head1 Parallel dispatch
 
 Any of the method call forms may be turned into a hyperoperator by
@@ -681,6 +688,8 @@
 
 The Csub keyword is optional after either Cmulti or Cproto.
 
+A Cproto declaration must come before any matching multis, if at all.
+
 =head1 Roles
 
 Classes are primarily in charge of object management, and only
@@ -704,7 +713,7 @@
method feed ($food) {
$food.open_can;
$food.put_in_bowl;
-   self.call;
+   self.some_other_method;
}
 }
 


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

2006-04-01 Thread Joe Gottman


 -Original Message-
 +You may cast CArguments to other types with a prefix sigil operator:
 +
 +$args = \3; # same as $args = \(3)
 +$$args; # same as $args as Scalar or Scalar($args)
 +@$args; # same as '$args as Array  or Array($args)
 +%$args; # same as '$args as Hash   or Hash($args)
 +$args; # same as '$args as Code   or Hash($args)


Shouldn't this last one be
  +$args; # same as '$args as Code   or Code($args)

Joe Gottman
 



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

2006-04-01 Thread autrijus
Author: autrijus
Date: Sat Apr  1 14:01:16 2006
New Revision: 8528

Modified:
   doc/trunk/design/syn/S06.pod
   doc/trunk/design/syn/S12.pod
   doc/trunk/design/syn/S13.pod

Log:
* S06+S12: Split the old multiple-dispatch into two distinct ideas:

- Method call vs Subroutine call
- Multiple dispatch vs Single dispatch

  A multi-method or multi-sub is simply a method/sub that has variants,
  and has nothing to do with transcending class boundaries.

  TimToady With a multi-sub, it's the sub-ness that transcends class
 boundaries, not the multi-ness.

  Consequently, $x.foo(3) still falls back to foo($x, 3) if there is
  not such method, but foo($x, 3) won't magically call the foo method
  even if it's declared as a multi-method.  To get the old magical dual
  behaviour, use multi submethod.

  multi foo within a class/role now means multi method foo.

Modified: doc/trunk/design/syn/S06.pod
==
--- doc/trunk/design/syn/S06.pod(original)
+++ doc/trunk/design/syn/S06.podSat Apr  1 14:01:16 2006
@@ -34,13 +34,6 @@
 subroutines masquerading as methods. They have an invocant and belong to
 a particular kind or class.
 
-BMultimethods (keyword: Cmulti) are routines that transcend class
-boundaries, and can have one or more invocants. 
-
-BPrototypes (keyword: Cproto) specify the commonalities (such
-as parameter names, fixity and associativity) shared by all multis
-of that name in the scope of the Cproto declaration.
-
 BRules (keyword: Crule) are methods (of a grammar) that perform
 pattern matching. Their associated block has a special syntax (see
 Synopsis 5).
@@ -52,6 +45,32 @@
 as they are parsed (i.e. at compile-time). Macros may return another
 source code string or a parse-tree.
 
+=head1 Routine modifiers
+
+BMultimethods (keyword: Cmulti) are routines that can have multiple
+variants that shares the same name, selected by arity, types, or some
+other constraints.  They may have multliple invocants.
+
+BPrototypes (keyword: Cproto) specify the commonalities (such
+as parameter names, fixity and associativity) shared by all multis
+of that name in the scope of the Cproto declaration.
+
+A modifier keyword may occur before the routine keyword in a named routine:
+
+proto sub foo {...}
+multi sub foo {...}
+proto method bar {...}
+multi method bar {...}
+
+If the routine keyword is omitted, it defaults to Cmethod inside a
+class or role, and Csub inside a module or package.
+
+class C {
+multi foo {...} # multi method foo
+}
+module M {
+multi bar {...} # multi sub bar
+}
 
 =head2 Named subroutines
 
@@ -427,7 +446,7 @@
 
 =head2 Invocant parameters
 
-A method invocant is specified as the first parameter in the parameter
+A method invocant may be specified as the first parameter in the parameter
 list, with a colon (rather than a comma) immediately after it:
 
 method get_name ($self:) {...}
@@ -442,31 +461,36 @@
 Multimethod and multisub invocants are specified at the start of the parameter
 list, with a colon terminating the list of invocants:
 
-multi sub handle_event ($window, $event: $mode) {...}# two invocants
+multi sub handle_event ($window, $event: $mode) {...}   # two invocants
+multi method set_name ($self, $name: $nick) {...}   # two invocants
 
-Multi invocant arguments are passed positionally, though the first
-invocant can be passed via the method call syntax if the multi happens
-to be defined as a multi method within the class of the first invocant.
-
-# Multimethod calls...
-handle_event($w, $e, $m);
-$w.handle_event($e, $m);
+If the parameter list for a Cmulti contains no colon to delimit
+the list of invocant parameters, then all positional parameters are
+considered invocants.  If it's a Cmulti method and Cmulti submethod,
+an additional implicit unamed Cself invocant is prepended to the
+signature list.
+
+For the purpose of matching positional arguments against invocant parameters,
+the invocant argument passed via the method call syntax is considered the
+first positional argument:
+
+handle_event($w, $e, $m);   # calls the multi sub
+$w.handle_event($e, $m);# ditto, but only if there is no
+# suitable $w.handle_event method
 
 Invocants may also be passed using the indirect object syntax, with a colon
 after them. The colon is just a special form of the comma, and has the
 same precedence:
 
-# Indirect method call...
-set_name $obj: Sam;
-
-# Indirect multimethod call...
-handle_event $w, $e: $m;
+set_name $obj: Sam;   # try $obj.set_name(Sam) first, then
+# fall-back to set_name($obj, Sam)
+$obj.set_name(Sam);   # same as the above
 
 Passing too many or too few invocants is a fatal error if no matching
 definition can be found.
 
 An invocant is the topic of the corresponding method or 

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

2006-04-01 Thread autrijus
Author: autrijus
Date: Sat Apr  1 14:07:20 2006
New Revision: 8529

Modified:
   doc/trunk/design/syn/S06.pod
   doc/trunk/design/syn/S12.pod
   doc/trunk/design/syn/S13.pod

Log:
* Bump version for the affected S06, S12 and S13.

Modified: doc/trunk/design/syn/S06.pod
==
--- doc/trunk/design/syn/S06.pod(original)
+++ doc/trunk/design/syn/S06.podSat Apr  1 14:07:20 2006
@@ -15,7 +15,7 @@
   Date: 21 Mar 2003
   Last Modified: 1 Apr 2006
   Number: 6
-  Version: 21
+  Version: 22
 
 
 This document summarizes Apocalypse 6, which covers subroutines and the

Modified: doc/trunk/design/syn/S12.pod
==
--- doc/trunk/design/syn/S12.pod(original)
+++ doc/trunk/design/syn/S12.podSat Apr  1 14:07:20 2006
@@ -14,7 +14,7 @@
   Date: 27 Oct 2004
   Last Modified: 1 Apr 2006
   Number: 12
-  Version: 11
+  Version: 12
 
 =head1 Overview
 

Modified: doc/trunk/design/syn/S13.pod
==
--- doc/trunk/design/syn/S13.pod(original)
+++ doc/trunk/design/syn/S13.podSat Apr  1 14:07:20 2006
@@ -12,9 +12,9 @@
 
   Maintainer: Larry Wall [EMAIL PROTECTED]
   Date: 2 Nov 2004
-  Last Modified: 21 Aug 2005
+  Last Modified: 1 Apr 2006
   Number: 13
-  Version: 3
+  Version: 4
 
 =head1 Overview
 


replacement of $

2006-04-01 Thread Larry Wall


Recently I had time to think about the $ symbol we use in Perl.

I think Perl has been using the USD symbol for too long, and I'm now sure
that it's time to replace it. After some research I came to the conclusion 
that the best fit is the euro symbol (€).

So, spread the word, Perl 6 will require you to replace all the $ in your 
scripts with €. That's just a regex after all...




Re: replacement of $

2006-04-01 Thread Darren Duncan

At 15:04 -0800 1/4/06, Larry Wall wrote:

Recently I had time to think about the $ symbol we use in Perl.

I think Perl has been using the USD symbol for too long, and I'm now sure
that it's time to replace it. After some research I came to the conclusion
that the best fit is the euro symbol (¤).

So, spread the word, Perl 6 will require you to replace all the $ in your
scripts with ¤. That's just a regex after all...


But $ isn't specifically a USD symbol.  Its used 
by Canada and Australia too, if not more places. 
Its multi-country like the Euro is.


Perhaps what we need is a more universal currency.  I suggest gold.

So every relevant symbol name could start with 
'Au' instead of '$', and an advantage of this is 
that it is still easy to type on any keyboard.


-- Darren Duncan


Re: replacement of $

2006-04-01 Thread Larry Wall
On Sat, Apr 01, 2006 at 03:11:27PM -0800, Larry Wall wrote:
: 
: 
: Recently I had time to think about the $ symbol we use in Perl.
: 
: I think Perl has been using the USD symbol for too long, and I'm now sure
: that it's time to replace it. After some research I came to the conclusion 
: that the best fit is the euro symbol (€).
: 
: So, spread the word, Perl 6 will require you to replace all the $ in your 
: scripts with €. That's just a regex after all...

Hmm, like anyone's going to believe you...

Anyone can forge Larry-like email.  Look how easy it is for *me* to
forge email from Larry even though I'm in Japan right now.  All you
have to do is end most of your paragraphs with ... and throw in a
few Hmms here and there

And then there's all these checkins I've been forging from Audrey.
Piece o' cake...

Now, gettin' myself made up to look like Larry for the Bugs Manifesto,
that was a wee bit more challenging, but I think most people were fooled...

TomTiady, AKA 落第の駱駝, AKA Larry Boy (the tsukemono, not the pickle)


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

2006-04-01 Thread Uri Guttman
 a == autrijus  [EMAIL PROTECTED] writes:

  a +You may cast CArguments to other types with a prefix sigil operator:
  a +
  a +$args = \3; # same as $args = \(3)
  a +$$args; # same as $args as Scalar or Scalar($args)
  a +@$args; # same as '$args as Array  or Array($args)
  a +%$args; # same as '$args as Hash   or Hash($args)
  a +$args; # same as '$args as Code   or Hash($args)
  a +

  a +Casted as an array, you can access to all positionals.  Casted as
  a +a hash, all nameds.  As a scalar, the invocant.  As a code, the
  a +slurpy nameless block.

s/casted/cast/g

and i would word those as 'cast into an array'. here is my rewrite:

When cast into an array, you can access all the positional
arguments; Into a hash, all named arguments; Into a scalar, the
invocant; Into code, into slurpy nameless block.

uri

-- 
Uri Guttman  --  [EMAIL PROTECTED]   http://www.stemsystems.com
--Perl Consulting, Stem Development, Systems Architecture, Design and Coding-
Search or Offer Perl Jobs    http://jobs.perl.org


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

2006-04-01 Thread Ruud H.G. van Tol
Uri Guttman wrote:

   When cast into an array, you can access all the positional
   arguments; Into a hash, all named arguments; Into a scalar, the
   invocant; Into code, into slurpy nameless block.

The last 'into' should be 'the'.

s/Into/into/g

-- 
Affijn, Ruud




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

2006-04-01 Thread Larry Wall
On Sun, Apr 02, 2006 at 02:15:46AM +0200, Ruud H.G. van Tol wrote:
: Uri Guttman wrote:
: 
:  When cast into an array, you can access all the positional
:  arguments; Into a hash, all named arguments; Into a scalar, the
:  invocant; Into code, into slurpy nameless block.
: 
: The last 'into' should be 'the'.
: 
: s/Into/into/g

s[ s ( .* ) g ][s:g$0]

TomTiedy


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

2006-04-01 Thread autrijus
Author: autrijus
Date: Sat Apr  1 19:35:01 2006
New Revision: 8531

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

Log:
* S02: typo fix and wording cleanup from Uri Guttman.

Modified: doc/trunk/design/syn/S02.pod
==
--- doc/trunk/design/syn/S02.pod(original)
+++ doc/trunk/design/syn/S02.podSat Apr  1 19:35:01 2006
@@ -401,8 +401,9 @@
 %$args; # same as '$args as Hash   or Hash($args)
 $args; # same as '$args as Code   or Code($args)
 
-Casted as an array, you can access to all positionals.  Casted as a hash, all
-nameds.  As a scalar, the invocant.  As a code, the slurpy nameless block.
+When cast into an array, you can access all the positional arguments; Into a
+hash, all named arguments; Into a scalar, the invocant; Into code, its slurpy
+nameless block.
 
 All prefix sigil operators accept one positional argument, evaluated in
 scalar context as a rvalue.  They can interpolate in strings if called with


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

2006-04-01 Thread autrijus
Author: autrijus
Date: Sat Apr  1 20:10:15 2006
New Revision: 8532

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

Log:
* upper/lowercase English nit fix for the last patch as suggested by TimToady 

Modified: doc/trunk/design/syn/S02.pod
==
--- doc/trunk/design/syn/S02.pod(original)
+++ doc/trunk/design/syn/S02.podSat Apr  1 20:10:15 2006
@@ -401,8 +401,8 @@
 %$args; # same as '$args as Hash   or Hash($args)
 $args; # same as '$args as Code   or Code($args)
 
-When cast into an array, you can access all the positional arguments; Into a
-hash, all named arguments; Into a scalar, the invocant; Into code, its slurpy
+When cast into an array, you can access all the positional arguments; into a
+hash, all named arguments; into a scalar, the invocant; into code, its slurpy
 nameless block.
 
 All prefix sigil operators accept one positional argument, evaluated in


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

2006-04-01 Thread autrijus
Author: autrijus
Date: Sat Apr  1 20:46:57 2006
New Revision: 8533

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

Log:
* S13: specify type casting in the form of
multi submethod *infix:as
  which usually only cares about the class of its second invocant.

Modified: doc/trunk/design/syn/S13.pod
==
--- doc/trunk/design/syn/S13.pod(original)
+++ doc/trunk/design/syn/S13.podSat Apr  1 20:46:57 2006
@@ -116,3 +116,17 @@
 this hash over a lexical scope, so you could have different policies
 on magical autogeneration.  The default mappings correspond to the
 standard fallback mappings of Perl 5 overloading.
+
+=head1 Type Casting
+
+A class can use the C *infix:as  submethod to declare that its objects
+can be casted to some other class:
+
+multi submethod *infix:as (IO)  { $*OUT }
+multi submethod *infix:as (Int) { 1 }
+multi submethod *infix:as (Str) { Hello }
+
+With the above declaration, C$obj as foo is equivalent to C$obj as Str,
+because the multi dispatch cares only about the class.
+
+=cut


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

2006-04-01 Thread autrijus
Author: autrijus
Date: Sat Apr  1 20:49:18 2006
New Revision: 8534

Modified:
   doc/trunk/design/syn/S06.pod
   doc/trunk/design/syn/S12.pod

Log:
* Larry (aka TimToady in the previous commit log; sorry for
  spilling of IRC context) requested that multi should still
  only default to multi sub to reduce lookarounds. 
* Clarify that unary operators such as !$x always prefers
  method dispatch first, as $x.prefix!.

Modified: doc/trunk/design/syn/S06.pod
==
--- doc/trunk/design/syn/S06.pod(original)
+++ doc/trunk/design/syn/S06.podSat Apr  1 20:49:18 2006
@@ -62,15 +62,7 @@
 proto method bar {...}
 multi method bar {...}
 
-If the routine keyword is omitted, it defaults to Cmethod inside a
-class or role, and Csub inside a module or package.
-
-class C {
-multi foo {...} # multi method foo
-}
-module M {
-multi bar {...} # multi sub bar
-}
+If the routine keyword is omitted, it defaults to Csub.
 
 =head2 Named subroutines
 
@@ -467,7 +459,7 @@
 If the parameter list for a Cmulti contains no colon to delimit
 the list of invocant parameters, then all positional parameters are
 considered invocants.  If it's a Cmulti method and Cmulti submethod,
-an additional implicit unamed Cself invocant is prepended to the
+an additional implicit unnamed Cself invocant is prepended to the
 signature list.
 
 For the purpose of matching positional arguments against invocant parameters,

Modified: doc/trunk/design/syn/S12.pod
==
--- doc/trunk/design/syn/S12.pod(original)
+++ doc/trunk/design/syn/S12.podSat Apr  1 20:49:18 2006
@@ -651,6 +651,10 @@
 
 close($handle,)
 
+This applies to prefix unary operators as well:
+
+!$obj;  # same as $obj.prefix:!
+
 A method call first considers methods (including multi-methods and submethods)
 from the class hierarchy of C$handle, and fails over to the subroutine
 dispatcher as a last resort only if no method can be found in the class
@@ -686,9 +690,7 @@
 
 The syntax for calling back to CMyClass is C$obj!MyClass::meth().
 
-Outside a class or a role, the Csub keyword is optional after either
-Cmulti or Cproto.  Within a class or a role, the Cmethod keyword
-is implied instead of Csub.
+The Csub keyword is optional after either Cmulti or Cproto.
 
 A Cproto declaration must come before any matching multis, if at all.
 


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

2006-04-01 Thread Uri Guttman
 a == autrijus  [EMAIL PROTECTED] writes:

  a Author: autrijus
  a Date: Sat Apr  1 20:10:15 2006
  a New Revision: 8532

  a Modified:
  adoc/trunk/design/syn/S02.pod

  a Log:

  a * upper/lowercase English nit fix for the last patch as suggested
  a by TimToady

you might as well attribute the s:g/Into/into/ to dr. ruud. all timtoady
did was correct dr. ruud's p5 s///g into p6's s:g///. if we are going to
pick nits this small, then the tiny amount of credit is worth bestowing
upon the correct contributor. :)

one of these days when i have tuits of large circumference, i will do a
nit pass over as much of the A/E/S as i can handle before my brain
explodes. having done tech editing for perl books is good training for
this. in fact it would be a good idea to have several such passes by
those with editing skill before those docs are 'released'. some of the
concepts are so new to so many and are bleeding edge that the wording
used has to be extra clean of nits and such stuff as dangling pronouns
and other common flaws of technical writing.

speaking of bleeding edge? what do you call the opposite of that?

spoiler space



















the coagulated edge.

uri

-- 
Uri Guttman  --  [EMAIL PROTECTED]   http://www.stemsystems.com
--Perl Consulting, Stem Development, Systems Architecture, Design and Coding-
Search or Offer Perl Jobs    http://jobs.perl.org


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

2006-04-01 Thread autrijus
Author: autrijus
Date: Sat Apr  1 21:18:08 2006
New Revision: 8535

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

Log:
* S06: Rationalize the free mix of named and positional args.

   Positional pair arguments must _always_ be put in parentheses.

   Multiple named arguments with the same name can be concatenated
   into a @param now.  $param gets the _last_ named argument,
   similar to how hash constructor and rule bindings work.

Modified: doc/trunk/design/syn/S06.pod
==
--- doc/trunk/design/syn/S06.pod(original)
+++ doc/trunk/design/syn/S06.podSat Apr  1 21:18:08 2006
@@ -338,6 +338,8 @@
 possible on those arguments that are bound to a final slurpy or
 arglist variable.)
 
+=head2 Named arguments
+
 Named arguments are recognized syntactically at the
 comma level.  Pairs intended as positional arguments rather than
 named arguments must be isolated by extra parens:
@@ -405,36 +407,34 @@
 bound to positionals only by name, not as ordinary positional CPair
 objects.  Leftover named arguments can be slurped into a slurpy hash.
 
-After the positional and named arguments, all the rest of the arguments
-are taken to be list arguments.  Any pairs within the list are taken
-to be list elements rather than named arguments, and show up as CPair
-arguments even if the compiler marked them as named.
-
-It is possible that named pairs are not really a separate type; it
-would be sufficient to have a bit somewhere in the Pair that can be
-interrogated under the C.named property.  The compiler is allowed to
-stop marking named pairs at the first C == , but the code that
-converts unused positional arguments to implicit slurpy list needs to
-be careful to clear the C.named property on arguments so converted.
-For instance, if you say
+Because named and positional arguments can be freely mixed, the
+programmer always needs to disambiguate pairs literals from named
+arguments with parenthesis:
 
+# Named argument a
 push @array, 1, 2, :ab;
 
-the compiler cannot know that the slurpy list starts at 1, so it markes
-:ab as a named pair.  But that mark needs to be cleared, or
+# Pair object (a='b')
+push @array, 1, 2, (:ab);
+
+Perl 6 allows multiple same-named arguments, and records the relative
+order of arguments with the same name.  When there are more than one
+argument, the C@ sigil in the parameter list causes the arguments
+to be concatenated:
 
-say pop(@array);
+sub fun (Int @x) { ... }
+fun( x = 1, x = 2 );  # @x := (1, 2)
 
-will then think you said:
+Other sigils binds only to the Ilast argument with that name:
 
-say *pop(@array);
+sub fun (Int $x) { ... }
+f( x = 1, x = 2 );# $x := 2
 
-and treat :ab as a named argument to print, which is not what you want.
+This means a defaults must come Ibefore known named parameters,
+similar to how hash constructors work:
 
-In any event, the named parameters need to be kept in the list until
-bound.  An implementation that pulls named parameters out of the list
-into a hash prematurely will lose the ordering of the push above,
-for instance.
+# Allow x and y in %defaults be overrided
+f( *%defaults, x = 1, y = 2 );
 
 =head2 Invocant parameters
 


Re: replacement of $

2006-04-01 Thread Yuval Kogman
On Sun, Apr 02, 2006 at 02:04:07 +0300, Larry Wall wrote:
^^^-- (actually that was IDT in the headers)

 Hi,
 I'm in Israel and Japan at the same time!

Nice one though ;-)

plugIf you guys would have participated in the keysigning
parties.../plug

-- 
  Yuval Kogman [EMAIL PROTECTED]
http://nothingmuch.woobling.org  0xEBD27418



pgpAaFxAF3CvE.pgp
Description: PGP signature