On Tue, Nov 10, 2009 at 03:37:54PM -0600, Jesse Luehrs wrote: > 1) Attributes in roles aren't real objects, and there is no attribute > metaclass for roles. This makes it impossible to automatically apply > attribute traits through ::MetaRole. > > 2) Metaclass compatibility code in Moose/CMOP is pretty broken. It > happens to work reasonably in most cases because it can generally figure > things out if there are class or instance (??) meta-traits applied, but > this isn't always the case. I have a branch in cmop for better metaclass > incompatibility detection, but it breaks all kinds of things in Moose, > since Moose doesn't currently fix metaclasses entirely correctly. I > started trying to fix it in Moose as well, but got a bit overwhelmed. > (An example of the failure: when a superclass has a class metaclass > trait applied, and something subclasses it and tries to apply an > attribute metaclass trait without also applying a class metaclass > trait, Moose decides that it doesn't know how to resolve that). > > 3) Going into more detail on the OMG EVIL CODE GENERATION topic, > ::Constructor is reasonably separated out so that parts of it are easy > to override, but ::Destructor is not, which is keeping me from adding > actual support for that to MooseX::NonMoose.
Oh, and: 4) lazy_build is nice, but it really doesn't feel like it fits in normal Moose - it should probably be a special case of some more general feature (similar in concept to MooseX::Attributes::Curried, except triggered by an option rather than a separate attribute declarer sub). Also, the clearer and predicate it defines should probably default to private. -doy