The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
Revision history for Perl extension Class-MOP.

0.35 Sat. Sept. 30, 2006

    * scripts/class_browser.pl
      - initial prototype of a class browser, more 
        on this to come. Comments and patches are 
        very much welcome.

    * Class::MOP
      - All Class::MOP::* accessors are no longer 
        re-generated in the bootstrap, instead 
        they are aliased from the originals
        - fixed tests to reflect
      - added Class::MOP::Method (and its subclasses) 
        to the bootstrap
        - adjusted tests for this
      - added the Class::MOP::Instance attributes
        to the bootstrap
    
    * Class::MOP::Method
      *** API CHANGE ***
      - methods are no longer blessed CODE refs
        but are actual objects which can be CODE-ified
        - adjusted tests to compensate
        - adjusted docs for this        

    * Class::MOP::Class
      - changed how methods are dealt with to 
        encapsulate most of the work into the 
        &get_method_map method
      - made several adjustments for the change
        in Class::MOP::Method
      - &add_attribute now checks if you are adding 
        a duplicate name, and properly removes the 
        old one before installing the new one
        - added tests for this
        - adjusted docs for this
    
    * Class::MOP::Class::Immutable
      - added caching of &get_method_map
      - fixed issue with &get_package_symbol
      - cleaned up the methods that die (patch by David Wheeler)
    
    * Class::MOP::Package
      - added filtering capabilities to 
        &list_all_package_symbols

0.34 Sat. Aug. 26, 2006
    * Class::MOP::Class
      - added the %:methods attribute, which like
        the $:version and such just actually goes 
        to the symbol table to get it's stuff. 
        However, it makes the MOP more complete.
     ** API CHANGE **
      - The &create method now requires that all 
        but the package name now is passed in as 
        named parameters. See docs for more info.
        - updated docs and tests for this
        
    * Class::MOP::Object
      - added &dump method to easily Data::Dumper 
        an object
        
    * Class::MOP
      - cleaned up the initialization of attributes 
        which do not store things in the instance 
      - added the %:methods attribute definition to
        the bootstrap
        
    ~ lots of misc. test cleanup

0.33 Sat. Aug. 19, 2006
    * Class::MOP::Class
      - moved the metaclass cache out of here 
        and it is now in Class::MOP itself.
        
    * Class::MOP
      - moved all the metaclass cache stuff here
        - fixed all tests for this

    * Class::MOP::Attribute
      - reference values (other than CODE refs) 
        are no longer allowed for defaults
        - added tests for this
    
    * Class::MOP::Package
      - fixed an issue with perl 5.8.1 and how it deals 
        with symbol tables. The namespace hash is now 
        always reloaded from the symbol table. 

    ~ lots of misc. documentation cleanup

0.32 Sat. Aug. 12, 2006
    + added Class::MOP::Object so that the 
      metamodel is more complete (and closer
      to what Perl 6 will probably be).

    * Class::MOP::Package
      - refactored entire class, this is now 
        the primary gateway between the metaclass
        and the Perl 5 symbol table
        - added many tests for this
      - this class is now a subclass of 
        Class::MOP::Object
        - added some tests to reflect this
        
    * Class::MOP::Class
      - refactored all symbol table access to 
        use Class::MOP::Package methods instead
        
    * Class::MOP::Module
      - adding the $:version attribute in the bootstrap
        so that Module has a version as an attribute
        - see comment in Class::MOP for details
      - added the $:authority attribute to this module 
        as well as an &identifier method, to bring us 
        ever closer to Perl 6 goodness 
        - I have added $AUTHORITY to all the modules 
        - added tests for this
      
    * Class::MOP::Instance
      - added &deinitialize_slot for removing slots 
        from an instance
        - added tests for this      
      
    * Class::MOP::Attribute 
      - added support for &deinitialize_slot for removing
        slots from an instance
        - added tests for this

0.31 Sat. July 15, 2006

    * Class::MOP::Class
      - added &find_method_by_name to locate a method
        anywhere within the class hierarchy   
        
    * Class::MOP::Attribute
      - added &set_value and &get_value for getting 
        the value of the attribute for a particular 
        instance.

0.30 Wed. July 5, 2006
    ---------------------------------------
    This is the first version of Class::MOP 
    to introduce the immutable features which
    will be used for optimizating the MOP. 
    This support should still be considered
    experimental, but moving towards stability.
    ---------------------------------------
    
    * Created Class::MOP::Class::Immutable  
    
    * Created the Class::MOP::Package and 
      Class::MOP::Module classes to more 
      closely conform to Perl 6's meta-model

    * Class::MOP::Class
      - now inherits from Class::MOP::Module
      - several methods moved to ::Module and 
        ::Package and now inherited
        - added tests for this
      
    * Class::MOP::Instance
      - added an is_inlinable method to allow other 
        classes to check before they attempt to optimize.
      - added an inline_create_instance to inline 
        instance creation (of course) 
        
    ** API CHANGE **
      - the Class::MOP::Class::*_package_variable 
        methods are all now methods of Class::MOP::Package
        and called *_package_symbol instead. This is 
        because they are now more general purpose symbol 
        table manipulation methods.        

0.29_02 Thurs. June 22, 2006
    ++ DEVELOPER RELEASE ++
    * Class::MOP::Class
      - small change in &create so that it behaves 
        properly when inherited
      - small fix to &clone_instance

0.29_01 Fri. May 12, 2006
    ++ DEVELOPER RELEASE ++
      - This release works in combination with 
        Moose 0.09_01, it is a developer release
        because it introduces a new instance 
        sub-protocol and has not yet been 
        optimized.  

    * Class::MOP::Class
      - anon-classes are now properly garbage collected
        - added tests for this 
      - improved method modifier wrapping 

    * Class::MOP::Instance
      - added new instance protocol
        - added tests for this
      - changed all relevant modules and examples
        - Class::MOP::Class
        - Class::MOP::Attribute
        - examples/*

    * metaclass
      - you no longer need to specify the metaclass
        itself, if it is not there, Class::MOP::Class
        is just assumed
        - updated tests for this

    * examples/
      - added ArrayBasedStorage example to show 
        instance storage using ARRAY refs instead of
        HASH refs. 
        - added tests for this
      - InsideOutClass is totally revised using the 
        new instance protocol
        - added more tests for this

0.26 Mon. April 24, 2006
    * Class::MOP::Class
      - added find_attribute_by_name method
        - added tests and docs for this
      - some small optimizations

    * Class::MOP::Attribute
      - some small optimizations

0.25 Thurs. April 20, 2006
    * Class::MOP::Class
      - added create_anon_class for creating anonymous classes
        - added tests for this
      - added get_all_metaclasses, get_all_metaclass_names
        and get_all_metaclass_instances method to allow
        access to all the cached metaclass objects.
      - attribute slot initialization is now the responsibility
        of the attribute itself, and construct_instance now 
        delegates appropriately
        
    * Class::MOP::Attribute
      - attribute slot initialization is now the responsibility
        of the attribute itself, so we added a method for it
        called initialize_instance_slot
    
    * examples/
      - adjusted all the examples to use the new attribute 
        initialize_instance_slot method 

0.24 Tues. April 11, 2006
    * Class::MOP::Class
      - cleaned up how the before/after/around method 
        modifiers get named with Sub::Name

0.23 Thurs. March 30, 2006
	* Class::MOP::Class
	  - fixed the way attribute defaults are handled 
	    during instance construction (bug found by chansen)
	    
	* Class::MOP::Attribute
	  - read-only accessors ('reader') will now die if 
	    passed more than one argument (attempting to write
	    to them basically)
	      - added tests for this
	      - adjusted all /example files to comply 

0.22 Mon. March 20, 2006
    * Class::MOP::Class
      - localized $@ in the *_package_variable functions
        because otherwise, it does ugly things in Moose.
          - added test case for this

0.21 Wed. March 15, 2006
    * Class::MOP::Class
      - fixed issue where metaclasses are reaped from 
        our cache in global destruction, and so are not
        available in DESTORY calls

0.20 Thurs. March 2, 2006
    - removed the dependency for Clone since 
      we no longer to deep-cloning by default.
    
    * Class::MOP::Method
      - added &package_name, &name and 
        &fully_qualified_name methods, some of 
        which were formerly private subs in 
        Class::MOP::Class
      
    * Class::MOP::Method::Wrapped
      - allows for a method to be wrapped with 
        before, after and around modifiers 
          - added tests and docs for this feature

    * Class::MOP::Class
      - improved &get_package_symbol
          - &version and &superclasses now use it
      - methods are now blessed into Class::MOP::Method
        whenever possible
      - added methods to install CLOS-style method modifiers 
         - &add_before_method_modifier
         - &add_after_method_modifier         
         - &add_around_method_modifier
             - added tests and docs for these
      - added &find_next_method_by_name which finds the 
        equivalent of SUPER::method_name

0.12 Thurs. Feb 23, 2006
    - reduced the dependency on B, no need to always 
      have the latest

    * examples/
      - added docs to the C3 method dispatch order test
      - fixed missing Algorithm::C3 dependency by making 
        the test skip if it is not installed

0.11 Mon Feb. 20, 2006
    * examples/
      - added example of changing method dispatch order to C3
      
    * Class::MOP::Class
      - changed how clone_instance behaves, it now only does a
        shallow clone (see docs for more details)
        - added docs and tests

0.10 Tues Feb. 14, 2006
    ** This release was mostly about writing more tests and 
       cleaning out old and dusty code, the MOP should now 
       be considered "ready to use".

    - adding more tests to get coverage up a little higher,
      mostly testing errors and edge cases.
      - test coverage is now at 99%
      
    * Class::MOP
      - no longer optionally exports to UNIVERSAL::meta or
        creates a custom metaclass generator, use the 
        metaclass pragma instead.

    * Class::MOP::Class  
      - fixed a number of minor issues which came up in the 
        error/edge-case tests
        
    * Class::MOP::Attribute 
      - fixed a number of minor issues which came up in the 
        error/edge-case tests        
     
    * examples/
      - fixing the AttributesWithHistory example, it was broken.

0.06 Thurs Feb. 9, 2006
    * metaclass
      - adding new metaclass pragma to make setting up the 
        metaclass a little more straightforward
        
    * Class::MOP
      - clean up bootstrapping to include more complete 
        attribute definitions for Class::MOP::Class and 
        Class::MOP::Attribute (accessors, readers, writers, 
        etc.) ... it is redundant, but is useful meta-info
        to have around.

    * Class::MOP::Class
      - fixing minor meta-circularity issue with &meta, it 
        is now more useful for subclasses
      - added &get_attribute_map as an accessor for the 
        hash of attribute meta objects
      - &compute_all_applicable_attributes now just returns
        the attribute meta-object, rather than the HASH ref
        since all the same info can be gotten from the 
        attribute meta-object itself
          - updated docs & tests to reflect
      - added &clone_instance method which does a deep clone
        of the instance structure created by &construct_instance
          - added docs & tests for this
          - added Clone as a dependency
      - added &new_object and &clone_object convience methods to
        return blessed new or cloned instances
          - they handle Class::MOP::Class singletons correctly too
          - added docs & tests for this
      - cleaned up the &constuct_class_instance so that it behaves
        more like &construct_instance (and managed the singletons too)
      - added the &check_metaclass_compatibility method to make sure
        that metaclasses are upward and downward compatible.
          - added tests and docs for this
          
    * examples/
      - adjusting code to use the &Class::MOP::Class::meta
        fix detailed above
      - adjusting code to use the metaclass pragma
      
0.05 Sat Feb. 4, 2006
    * Class::MOP::Class
      - added the &attribute_metaclass and &method_metaclass
        attributes which contain a metaclass name to use for 
        attributes/methods respectively
    
    * Class::MOP
      - bootstrap additional attributes for Class::MOP::Class 
        
    * examples/
      - adjusted the example code and tests to use the new
        &attribute_metaclass feature of Class::MOP::Class
      - added new example:
        - LazyClass

0.04 Fri Feb. 3, 2006
    * Class::MOP::Class
      - some documentation suggestions from #perl6
    
    * Class::MOP::Attribute
      - improved error messages    
    
    * examples/
      - added new examples:
        - AttributesWithHistory
        - ClassEncapsultedAttributes

0.03 Fri Feb. 3, 2006
    - converted to Module::Build instead of EU::MM
    
    * Class::MOP::Attribute
      - refactored method generation code
      - attributes are now associated with class directly
    
    * examples/
      - refactored the InsideOut example to take advantage 
        of the Class::MOP::Attribute refactoring
      - changed example files to .pod files and hide thier
        package names from PAUSE (I don't want to own these
        namespaces really, they are just examples)

0.02 Thurs Feb. 2, 2006
    - moving examples from t/lib/* to examples/*
        - adding POD documentation to the examples

0.01 Thurs Feb. 2, 2006
    - Initial release