a number of changes;
[gitmo/Class-MOP.git] / lib / metaclass.pm
index f9f0b75..917459f 100644 (file)
@@ -12,7 +12,7 @@ use Class::MOP;
 
 sub import {
     shift;
-    my $metaclass = shift;
+    my $metaclass = shift || 'Class::MOP::Class';
     my %options   = @_;
     my $package   = caller();
     
@@ -31,6 +31,50 @@ sub import {
     });
 }
 
+=pod
+
+NOTES
+
+Okay, the metaclass constraint issue is a bit of a PITA.
+
+Especially in the context of MI, where we end up with an 
+explosion of metaclasses.
+
+SOOOO
+
+Instead of auto-composing metaclasses using inheritance 
+(which is problematic at best, and totally wrong at worst, 
+especially in the light of methods of Class::MOP::Class 
+which are overridden by subclasses (try to figure out how 
+LazyClass and InsideOutClass could be composed, it is not
+even possible)) we use a trait model.
+
+It will be similar to Class::Trait, except that there is 
+no such thing as a trait, a class isa trait and a trait 
+isa class, more like Scala really.
+
+This way we get several benefits:
+
+1) Classes can be composed like traits, and it Just Works.
+
+2) Metaclasses can be composed this way too :)
+
+3) When solving the metaclass constraint, we create an 
+   anon-metaclass, and compose the parent's metaclasses 
+   into it. This allows for conflict checking trait-style 
+   which should inform us of any issues right away.
+   
+Misc. Details:
+
+Class metaclasses must be composed, but so must any 
+associated Attribute and Method metaclasses. However, this 
+is not always relevant since I should be able to create a 
+class which has lazy attributes, and then create a subclass 
+of that class whose attributes are not lazy.
+
+
+=cut
+
 1;
 
 __END__
@@ -52,6 +96,9 @@ metaclass - a pragma for installing using Class::MOP metaclasses
 
 =head1 DESCRIPTION
 
+This is a pragma to make it easier to use a specific metaclass 
+and it's 
+
 =head1 AUTHOR
 
 Stevan Little E<lt>stevan@iinteractive.comE<gt>