Author: lwall
Date: 2010-07-11 19:03:32 +0200 (Sun, 11 Jul 2010)
New Revision: 31625

Modified:
   docs/Perl6/Spec/S12-objects.pod
Log:
[S12] Nail down class representations sooner to make jnthn++ happier


Modified: docs/Perl6/Spec/S12-objects.pod
===================================================================
--- docs/Perl6/Spec/S12-objects.pod     2010-07-11 16:53:20 UTC (rev 31624)
+++ docs/Perl6/Spec/S12-objects.pod     2010-07-11 17:03:32 UTC (rev 31625)
@@ -13,8 +13,8 @@
 
     Created: 27 Oct 2004
 
-    Last Modified: 10 Jul 2010
-    Version: 105
+    Last Modified: 11 Jul 2010
+    Version: 106
 
 =head1 Overview
 
@@ -2031,6 +2031,31 @@
 The application may only request that the optimizer close and finalize
 unmarked classes.
 
+=head1 Representations
+
+By default Perl 6 assumes that all objects have a representation
+of C<P6opaque>.  This may be overridden with a trait:
+
+    class Mammal is repr(P6Hash) {...}
+
+Whether implicit or explicit, the representation is considered to be
+fixed for the class after declaration, and the optimizer is free to
+optimize based on this guarantee.  It is illegal to create an object
+of the same type with any other representation.  If you wish to allow
+objects to be created with run-time specified representations, you
+must specifically pessimize the class:
+
+    class Mammal is repr(*) {...}
+
+All non-native representations are required to support undefined type
+objects that may contain unthrown exceptions (C<Failure> objects);
+while this can be implemented using an alternate representation,
+Perl 6 doesn't think of it that way.  All normal objects in Perl 6
+may be used as a specific object (proper noun) if they are defined,
+or as a generic object (common noun) whether or not they are defined.
+You get this representation polymorphism for free independently of
+the restriction above.
+
 =head1 Interface Consistency
 
 By default, all methods and submethods that do not declare an explicit
@@ -2142,7 +2167,7 @@
     parents       list of parent classes
     roles         list of roles
     disambig      how to deal with ambiguous method names from roles
-    layout        P6opaque, P6hash, P5hash, P5array, PyDict, Cstruct, etc.
+    repr          P6opaque, P6hash, P5hash, P5array, PyDict, Cstruct, etc.
 
 These are for the standard PerlĀ 6 Meta-Object Protocol, but other MOPs
 may define other traits.  The identifier should probably be accessed

Reply via email to