X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2Fmetaclass.pm;h=917459f31b59bccbecdb052824b4e9e64ec5c7c3;hb=c9e77dbb017258dc44295fc4ec8e0bdd99ec9361;hp=f9f0b75877655d5be19c43b015382b2627010287;hpb=677eb1584b6e27c6079daed35110cb4192153db4;p=gitmo%2FClass-MOP.git diff --git a/lib/metaclass.pm b/lib/metaclass.pm index f9f0b75..917459f 100644 --- a/lib/metaclass.pm +++ b/lib/metaclass.pm @@ -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 Estevan@iinteractive.comE