Author: lwall Date: 2009-03-18 20:46:15 +0100 (Wed, 18 Mar 2009) New Revision: 25891
Modified: docs/Perl6/Spec/S02-bits.pod docs/Perl6/Spec/S06-routines.pod docs/Perl6/Spec/S09-data.pod docs/Perl6/Spec/S32-setting-library/Containers.pod Log: junctions are now considered a native type with private eigenstates Modified: docs/Perl6/Spec/S02-bits.pod =================================================================== --- docs/Perl6/Spec/S02-bits.pod 2009-03-18 19:04:16 UTC (rev 25890) +++ docs/Perl6/Spec/S02-bits.pod 2009-03-18 19:46:15 UTC (rev 25891) @@ -12,9 +12,9 @@ Maintainer: Larry Wall <la...@wall.org> Date: 10 Aug 2004 - Last Modified: 15 Mar 2009 + Lwst Modified: 18 Mar 2009 Number: 2 - Version: 159 + Version: 160 This document summarizes Apocalypse 2, which covers small-scale lexical items and typological issues. (These Synopses also contain @@ -576,7 +576,7 @@ Built-in object types start with an uppercase letter. This includes immutable types (e.g. C<Int>, C<Num>, C<Complex>, C<Rat>, C<Str>, -C<Bit>, C<Regex>, C<Set>, C<Junction>, C<Code>, C<Block>, C<List>, +C<Bit>, C<Regex>, C<Set>, C<Code>, C<Block>, C<List>, C<Seq>), as well as mutable (container) types, such as C<Scalar>, C<Array>, C<Hash>, C<Buf>, C<Routine>, C<Module>, etc. @@ -588,6 +588,11 @@ repeated autoboxing can slow your program more than the native type can speed it up.) +The C<junction> type is considered a native type because its internal +representation is fixed, and you may not usefully derive from it +because the intent of junctions is to autothread any method calls +on them. + Some object types can behave as value types. Every object can produce a "WHICH" value that uniquely identifies the object for hashing and other value-based comparisons. Normal objects @@ -937,7 +942,7 @@ C<Failure> role. (The C<undef> function merely returns the most generic C<Failure> object. Use C<fail> to return more specific failures. Use C<Object> for the most generic non-failure undefined value. The C<Any> -type is also undefined, but excludes C<Junctions> so that autothreading +type is also undefined, but excludes C<junctions> so that autothreading may be dispatched using normal multiple dispatch rules.) The C<Nil> type is officially undefined as an item but interpolates @@ -968,7 +973,6 @@ Range A pair of Ordered endpoints; gens immutables when iterated Set Unordered collection of values that allows no duplicates Bag Unordered collection of values that allows duplicates - Junction Set with additional behaviors Signature Function parameters (left-hand side of a binding) Capture Function call arguments (right-hand side of a binding) Blob An undifferentiated mass of bits @@ -1028,8 +1032,8 @@ Class Perl 6 standard class namespace Role Perl 6 standard generic interface/implementation Grammar Perl 6 pattern matching namespace - Any Perl 6 object (default routine parameter type, excludes Junction) - Object Perl 6 object (default block parameter type, either Any or Junction) + Any Perl 6 object (default routine parameter type, excludes junction) + Object Perl 6 object (default block parameter type, either Any or junction) A C<KeyHash> differs from a normal C<Hash> in how it handles default values. If the value of a C<KeyHash> element is set to the default Modified: docs/Perl6/Spec/S06-routines.pod =================================================================== --- docs/Perl6/Spec/S06-routines.pod 2009-03-18 19:04:16 UTC (rev 25890) +++ docs/Perl6/Spec/S06-routines.pod 2009-03-18 19:46:15 UTC (rev 25891) @@ -13,9 +13,9 @@ Maintainer: Larry Wall <la...@wall.org> Date: 21 Mar 2003 - Last Modified: 4 Mar 2009 + Last Modified: 18 Mar 2009 Number: 6 - Version: 105 + Version: 106 This document summarizes Apocalypse 6, which covers subroutines and the @@ -2876,7 +2876,7 @@ The natural way to implement autothreading for multi subs is to simply have the junctional signatures (the ones that can accept -Objects/Junctions as well as Any parameters) match more loosely than +Objects or junctions as well as Any parameters) match more loosely than the non-autothreading versions, and let multiple dispatch find the appropriate sub based on the signature. Those generic routines then end up redispatching to the more specific ones. Modified: docs/Perl6/Spec/S09-data.pod =================================================================== --- docs/Perl6/Spec/S09-data.pod 2009-03-18 19:04:16 UTC (rev 25890) +++ docs/Perl6/Spec/S09-data.pod 2009-03-18 19:46:15 UTC (rev 25891) @@ -12,9 +12,9 @@ Maintainer: Larry Wall <la...@wall.org> Date: 13 Sep 2004 - Last Modified: 4 Mar 2009 + Last Modified: 18 Mar 2009 Number: 9 - Version: 30 + Version: 31 =head1 Overview @@ -984,7 +984,7 @@ In particular, if a junction is used as an argument to any routine (operator, closure, method, etc.), and the scalar parameter you are attempting to bind the argument to is inconsistent with the -C<Junction> type, that routine is "autothreaded", meaning the routine +C<junction> type, that routine is "autothreaded", meaning the routine will be called automatically as many times as necessary to process the individual scalar elements of the junction in parallel. Modified: docs/Perl6/Spec/S32-setting-library/Containers.pod =================================================================== --- docs/Perl6/Spec/S32-setting-library/Containers.pod 2009-03-18 19:04:16 UTC (rev 25890) +++ docs/Perl6/Spec/S32-setting-library/Containers.pod 2009-03-18 19:46:15 UTC (rev 25891) @@ -15,8 +15,8 @@ Moritz Lenz <mor...@faui2k3.org> Tim Nelson <wayl...@wayland.id.au> Date: 19 Feb 2009 extracted from S29-functions.pod - Last Modified: 8 Mar 2009 - Version: 2 + Last Modified: 18 Mar 2009 + Version: 3 The document is a draft. @@ -701,25 +701,24 @@ class KeyHash does Associative {...} -=head2 Junction +=head2 junction -All method calls on Junctions autothread if there's no such method in the -Junction class. +All method calls on junctions autothread because the type provides no public methods. =over 4 -=item eigenstates +=item !eigenstates - our List multi method eigenstates (Junction $j) + method !eigenstates (Junction $j: --> List) Returns an unordered list of the values that constitute the junction (formerly called C<.values>). It flattens nested junctions of the same type, so C<(1|(2|3)).eigenstate> returns an arbitrary permutation of the list C<1, 2, 3>. -This method has a rather unusual name by intention; a more common name might -cause confusion as it could clash with a method name over which autothreading -is expected. +Note this is a private method; you must arrange for yourself to be trusted +by the junctions class in order to call it, which probably involves evil +MONKEY_PATCHING. =back