Bump to 0.60
[gitmo/Class-MOP.git] / Changes
1 Revision history for Perl extension Class-MOP.
2
3 0.60
4
5 0.59 Thurs. Jun 12, 2008
6     !! Several fixes resulting in yet another 25-30% speedup !!
7
8     * Class::MOP::Class
9       - now stores the instance of the instance 
10         metaclass to avoid needless recomputation
11         and deletes it when the cache is blown
12       - introduce methods to query Class::MOP::Class for 
13         the options used to make it immutable as well as
14         the proper immutable transformer. (groditi)        
15
16     * Class::MOP::Package
17       - {add, has, get, remove}_package_symbol all 
18         now accept a HASH ref argument as well as the
19         string. All internal usages now use the HASH
20         ref version.
21
22     * Class::MOP
23       - MOP.xs does sanity checks on the coderef 
24         to avoid a segfault
25       - is_class_loaded check now uses code that
26         was improved in Moose's ClassName type
27         check (Sartak)
28       - nonsensical (undef, empty, reference) class
29         names now throw a more direct error in
30         load_class (Sartak)
31         - tests for this and other aspects of
32           load_class (Sartak)
33     
34     * Class::MOP
35       Class::MOP::Class      
36       Class::MOP::Method
37       Class::MOP::Method::Wrapped
38       Class::MOP::Attribute
39       - switched usage of reftype to ref because 
40         it is much faster
41
42 0.58 Thurs. May 29, 2008
43     (late night release engineering)--
44     
45     - fixing the version is META.yml, no functional 
46       changes in this release
47
48 0.57 Wed. May 28, 2008
49     !! Several speedups resulting in 20-25% speedups !!
50     || (thanks to konobi, groditi, mst & CataMoose) !!
51
52     * Class::MOP::Class
53       - made get_method_map use list_all_package_symbols
54         instead of manually grabbing each symbol
55       - streamlining &initialize somewhat, since it gets
56         called so much
57         
58     * Class::MOP::Package
59       - made {get, has}_package_symbol not call 
60         &namespace so much 
61       - inlining a few calls to &name with 
62         direct HASH access key access
63       - added get_all_package_symbols to fetch 
64         a HASH of items based on a type filter
65         similar to list_all_package_symbols
66         - added tests for this
67
68     * Class::MOP::Method
69       Class::MOP::Method::Constructor
70       Class::MOP::Method::Generated
71       Class::MOP::Method::Accessor
72       - added more descriptive error message to help 
73         keep people from wasting time tracking an error
74         that is easily fixed by upgrading.
75
76     * Class::MOP::Immutable
77       - Don't inline a destructor unless the user actually
78         needs one
79         - added tests for this
80
81 0.56 Saturday, May 24, 2008
82     * Class::MOP
83       - we now get the &check_package_cache_flag
84         function from MRO::Compat
85       - All XS based functionality now has a 
86         Pure Perl alternative
87         - the CLASS_MOP_NO_XS environment variable
88           can now be used to force non-XS versions
89           to always be used
90
91     * Class::MOP::Attribute
92       - add has_read_method and has_write_method
93       - get_{read,write}_method_ref now wraps the
94         anon-sub ref in the method metaclass when
95         possible
96         - added tests for this
97
98     * Class::MOP::Immutable
99       - added the ability to "wrap" methods when
100         making the class immutable
101
102     * Class::MOP::Class
103       - now handling the edge case of ->meta->identifier
104         dying by wrapping add_package_symbol to specifically
105         allow for it to work.
106         - added tests for this
107
108     * Class::MOP::Attribute
109       Class::MOP::Class
110       Class::MOP::Immutable
111       - any time a method meta object is constructed
112         we make sure to pass the correct package and
113         method name information
114
115     * Class::MOP::Method
116       Class::MOP::Method::Wrapped
117       Class::MOP::Method::Generated
118       Class::MOP::Method::Accessor
119       Class::MOP::Method::Consructor
120       - the &wrap constructor method now requires that a 
121         'package_name' and 'name' attribute are passed. This 
122         is to help support the no-XS version, and will 
123         throw an error if these are not supplied.      
124       - all these classes are now bootstrapped properly
125         and now store the package_name and name attributes
126         correctly as well        
127
128     ~ Build.PL has been removed since the 
129       Module::Install support has been removed
130
131 0.55 Mon. April 28, 2008
132     - All classes now have proper C3 MRO support
133       - added MRO::Compat as a dependency to allow
134         for the C3 MRO support to Just Work in all
135         perl versions
136
137     * Class::MOP::Class
138       - rebless_instance now returns the instance
139         it has just blessed, this is mostly to
140         facilitate chaining
141       - set the attr correctly in rebless_instance
142         when it has no init_arg
143       - tweaked &linear_isa and &class_precedence_list
144         to support c3 classes.
145
146 0.54 Fri. March, 14, 2008
147     * Class::MOP
148       metaclass.pm
149       - making sure that load_class never gets
150         passed a value from @_ or $_ to squash
151         Ovid's bug (http://use.perl.org/~Ovid/journal/35763)
152
153     * Class::MOP::Class
154       - make_{immutable,mutable} now return 1
155         (cause Sartak asked)
156       - improved error handling in ->create method
157       - rebless_instance now takes extra params which
158         will be used to populate values
159         - added tests for this
160
161     * Class::MOP::Object
162       - localizing the Data::Dumper configurations so
163         that it does not pollute others (RT #33509)
164
165     * Class::MOP::Class
166       Class::MOP::Package
167       Class::MOP::Module
168       Class::MOP::Method
169       Class::MOP::Attribute
170       - these classes no longer define their own ->meta,
171         but instead just inherit from Class::MOP::Object
172
173     * Class::MOP::Instance
174       Class::MOP::Immutable
175       - these classes now inherit from Class::MOP::Object
176
177     * t/
178       - fixed the filename length on several
179         test files so we install on VMS better
180         (RT #32295)
181       - fixed incorrect use of catdir when it
182         should be catfile (RT #32385)
183
184 0.53 Thurs. Feb. 14, 1008
185     ~~ several doc. fixes and updates ~~
186
187     * Class::MOP::Class
188       Class::MOP::Method::Constructor
189       Class::MOP::Attribute
190         - making init_arg accept an undefined value
191           to indicate that no constructor args can
192           be passed (thanks to nothingmuch)
193           - added tests for this
194         - added attribute initializer attribute (rjbs)
195
196     * Class::MOP.
197         - making this use the new init_arg => undef
198           feature instead of the silly hack from
199           before (thanks to nothingmuch)
200
201 0.52 Tues. Jan. 22, 2008
202     * Class::MOP::Class
203       - fixed bug in rebless_instance
204         (discovered by ash)
205
206     * Class::MOP::Method::Constructor
207       - removed assumptions about the existence of
208         a &meta method
209
210 0.51 Mon. Jan. 14, 2008
211     ~~~ some misc. doc. fixes ~~~
212     ~~ updated copyright dates ~~
213
214     * Class::MOP
215       - now sets the IS_RUNNING_ON_5_10
216         constant so that we can take advantage
217         of some of the nice bits of 5.10
218
219     * Class::MOP::Class
220       - uses the IS_RUNNING_ON_5_10 flag to
221         optimize the &linearized_isa method
222         and avoid the hack/check for circular
223         inheritence in &class_precedence_list
224       - added rebless_instance method (Sartak)
225         - added tests for this
226
227     * Class::MOP::Immutable
228       - the immutable class now keeps track of
229         the transformer which immutablized it
230
231     * Class::MOP::Instance
232       - added rebless_instance_structure method (Sartak)
233         - added tests for this
234
235 0.50 Fri. Dec. 21, 2007
236     * Class::MOP::Class
237       - fixed bug in immutable to make sure that
238         transformation arguments are saved
239         correctly (mst)
240         - added tests for this
241
242     * Class::MOP::Immutable
243       - fixed a bug (see above)
244
245     * Class::MOP::Attribute
246       - some doc updates
247
248 0.49 Fri. Dec. 14, 2007
249     !! Class::MOP now loads 2 x faster  !!
250     !! with XS speedups (thanks konobi) !!
251
252     * Class::MOP
253       - removed the dependency on B
254       - added two XS functions (thanks konobi)
255         - get_code_info($code) which replaces all
256           the B fiddling we were doing with
257           faster/leaner XS level fiddling
258         - check_package_cache_flag($pkg_name) which
259           returns the PL_sub_generation variable to
260           be used to help manage method caching.
261
262           NOTE:
263           In 5.10 or greater this will actually
264           use the mro::get_pkg_gen instead to give
265           even more accurate caching information.
266           blblack++ for that stuff :)
267
268     * Class::MOP::Class
269       - added the &subclasses method (thanks rlb)
270       - added the update_package_cache_flag and
271         reset_package_cache_flag which help keep
272         track of when we need to re-fetch the
273         method map.
274       - Several small improvements to take advantage
275         of the new method map caching features
276
277 0.48 Mon. Nov. 26, 2007
278     * Class::MOP::Attribute
279       - fixed get_read/write_method to handle the
280         HASH ref case, which makes the
281         get_read/write_method_ref handle it too.
282         - added more tests for this
283
284 0.47 Sat. Nov. 24, 2007
285     * Class::MOP::Attribute
286       - fixed misspelling in get_write_method_ref
287         - added more tests for this
288
289 0.46 Fri. Nov. 23, 2007
290     * Class::MOP::Class
291       - added the linearized_isa method instead of constantly
292         pruning duplicate classes (this will be even more
293         useful in the 5.10-compat version coming soon)
294
295     * Class::MOP::Attribute
296       - added the get_read_method_ref and get_write_method_ref
297         methods which allow you to retrieve a CODE ref which
298         can always be used to read or write an attribute.
299
300 0.45 Thurs. Nov. 13, 2007
301     * Class::MOP::Attribute
302       - Fix error message on confess (groditi)
303
304 0.44 Thurs. Nov. 13, 2007
305     - Apparently I didn't make dist correctly (groditi)
306
307 0.43 Thurs. Nov. 13, 2007
308     * Class::MOP
309       - Add support for the 'builder' attribute (groditi)
310
311     * Class::MOP::Class
312       - optimise metaclass-already-exists check in
313         construct_class_instance (groditi)
314       - duplicate check into initialize to save a
315         call through (groditi)
316
317     * Class::MOP::Attribute
318       - Add support for the 'builder' attribute (groditi)
319       - Make predicates check for the existence of a value, not whether
320         it is defined (groditi)
321
322     * Class::MOP::Instance
323       - Make predicates check for the existence of a value, not whether
324         it is defined (groditi)
325
326     * Class::MOP::Method::Accessor
327       - made this a subclass of Class::MOP::Method::Generated
328         - removed the relevant attributes
329
330     * Class::MOP::Method::Constructor
331       - fixed the cached values we had to be more sane
332       - made this a subclass of Class::MOP::Method::Generated
333       - fixed generated constructor so it properly handles
334         subclasses now.
335         - added tests for this
336       - added the option to allow for both inlined and
337         non-inlined constructors.
338       - Update inlined methods for builder and predicate changes (groditi)
339
340     * Class::MOP::Method::Generated
341       - added this class as an abstract base for the
342         Class::MOP::Method::{Constructor,Accessor} classes
343         - added tests for this
344
345     *t/
346       - Alter tests (005, 014 020, 021) for new builder addition (groditi)
347       - Tests for new predicate behavior (and corrections to old tests) (groditi)
348
349     *examples/
350       - Update ArrayRef based class example to work with predicate changes
351
352 0.42 Mon. July 16, 2007
353     !!! Horray for mst, he fixed it !!!
354
355     * Class::MOP::Package
356       - alter symbol table handling to deal with 5.8.x and 5.9.x
357
358     * t/
359       - Get rid of the crappy workaround from 0.40/41
360
361 0.41 Sun. July 15, 2007
362     * t/
363         Arghh!!! My TODO test didn't work, so I handle
364         it manually now so that people can use this
365         with 5.9.5/bleadperl without issue.
366
367 0.40 Tues, July 3, 2007
368     * t/
369       ~ marked a test in 003_methods.t as TODO
370         for perl 5.9.5 (this test is irrelvant to
371         the module functioning on 5.9.5 for the most
372         part anyway)
373
374 0.39 Mon. June 18, 2007
375     * Class::MOP::Immutable
376       - added make_metaclass_mutable + docs (groditi)
377       - removed unused variable
378       - added create_immutable_transformer
379         necessary for sane overloading of immutable behavior
380          - tests for this (groditi)
381
382     * Class::MOP::Class
383       - Immutability can now be undone,
384         added make_mutable + tests + docs (groditi)
385       - Massive changes to the way Immutable is done
386         for details see comments next to make_immutable
387         This fixes a bug where custom metaclasses broke
388         when made immutable. We are now keeping one immutable
389         metaclass instance per metaclass instead of just one
390         to prevent isa hierarchy corruption. Memory use will go
391         up, but I suspect it will be neglible.
392          - New tests added for this behavior.  (groditi)
393
394 0.38 Thurs. May 31, 2007
395     ~~ More documentation updates ~~
396
397     * Class::MOP::Package
398       - we now deal with stub methods properly
399         - added tests for this
400       - fixed some tests failing on 5.9.5 (thanks blblack)
401
402     * Class::MOP::Attribute
403       - added get_read_method and get_write_method
404         thanks to groditi for this code, tests
405         and docs.
406         - added tests and POD for this
407
408     * Class::MOP::Class
409       - fixed RT issue #27329, clone object now
410         handles undef values correctly.
411         - added tests for this
412       - Corrected anon-class handling so that they
413         will not get reaped when instances still
414         exist which need to reference them. This is
415         the correct behavior, hopefully this is an
416         obscure enough feature that there are not too
417         many work arounds out in the wild.
418         - added tests for this by groditi
419         - updated docs to explain this
420
421     * metaclass
422       - load custom metaclasses automatically (thanks groditi)
423         - added tests for this behavior
424
425 0.37 Sat. March 10, 2007
426     ~~ Many, many documentation updates ~~
427
428     * Class::MOP
429       - added &load_class and &is_class_loaded
430         - added tests and docs for these
431
432     * Class::MOP::Attribute
433       - default now checks the instance with defined to
434         avoid setting off bool-overloads (found by Carl Franks)
435
436 0.37_002
437     * /t
438       - bad name in a test, causing meaningless failuress.
439         No other changes.
440
441 0.37_001
442
443     ~~ GLOBAL CHANGES ~~
444     - All attribute names are now consistent and follow Perl 6
445       style (prefixed with the sigil, and ! as the twigil for
446       private attrs). This should not affect any code, unless
447       you broke encapsulation, in which case, it is your problem
448       anyway.
449
450     !! Class::MOP::Class::Immutable has been removed
451
452     * Class::MOP::Method::Constructor
453       - this has been moved out of Class::MOP::Class::Immutable
454         and is a proper subclass of Class::MOP::Method now.
455
456     * Class::MOP::Class
457       - this module now uses Class::MOP::Immutable for the
458         immutable transformation instead of
459         Class::MOP::Class::Immutable.
460
461     + Class::MOP::Immutable
462       - this module now controls the transformation from a mutable
463         to an immutable version of the class. Docs for this will
464         be coming eventually.
465
466
467 0.36 Sun. Nov. 5, 2006
468     * Class::MOP::Class
469       - added a few 'no warnings' lines to keep annoying
470         (and meaningless) warnings from chirping during
471         global destruction.
472
473     * Class::MOP
474       - some more bootstrapping is now done on the new
475         classes
476
477     * Class::MOP::Class::Immutable
478       *** API CHANGE ***
479       - constructor generation is now handled by
480         the Class::MOP::Method::Constructor class
481
482     * Class::MOP::Method::Constructor
483       - created this to handle constructor generation
484         in Class::MOP::Class::Immutable
485
486     * Class::MOP::Attribute
487       *** API CHANGE ***
488       - attributes now delegate to the
489         Class::MOP::Method::Accessor to generate
490         accessors
491
492     * Class::MOP::Method::Accessor
493       - all accessor generation functions from
494         Class::MOP::Attribute have been moved here
495
496 0.35 Sat. Sept. 30, 2006
497
498     * scripts/class_browser.pl
499       - initial prototype of a class browser, more
500         on this to come. Comments and patches are
501         very much welcome.
502
503     * Class::MOP
504       - All Class::MOP::* accessors are no longer
505         re-generated in the bootstrap, instead
506         they are aliased from the originals
507         - fixed tests to reflect
508       - added Class::MOP::Method (and its subclasses)
509         to the bootstrap
510         - adjusted tests for this
511       - added the Class::MOP::Instance attributes
512         to the bootstrap
513
514     * Class::MOP::Method
515       *** API CHANGE ***
516       - methods are no longer blessed CODE refs
517         but are actual objects which can be CODE-ified
518         - adjusted tests to compensate
519         - adjusted docs for this
520
521     * Class::MOP::Class
522       - changed how methods are dealt with to
523         encapsulate most of the work into the
524         &get_method_map method
525       - made several adjustments for the change
526         in Class::MOP::Method
527       - &add_attribute now checks if you are adding
528         a duplicate name, and properly removes the
529         old one before installing the new one
530         - added tests for this
531         - adjusted docs for this
532
533     * Class::MOP::Class::Immutable
534       - added caching of &get_method_map
535       - fixed issue with &get_package_symbol
536       - cleaned up the methods that die (patch by David Wheeler)
537
538     * Class::MOP::Package
539       - added filtering capabilities to
540         &list_all_package_symbols
541
542 0.34 Sat. Aug. 26, 2006
543     * Class::MOP::Class
544       - added the %:methods attribute, which like
545         the $:version and such just actually goes
546         to the symbol table to get it's stuff.
547         However, it makes the MOP more complete.
548      ** API CHANGE **
549       - The &create method now requires that all
550         but the package name now is passed in as
551         named parameters. See docs for more info.
552         - updated docs and tests for this
553
554     * Class::MOP::Object
555       - added &dump method to easily Data::Dumper
556         an object
557
558     * Class::MOP
559       - cleaned up the initialization of attributes
560         which do not store things in the instance
561       - added the %:methods attribute definition to
562         the bootstrap
563
564     ~ lots of misc. test cleanup
565
566 0.33 Sat. Aug. 19, 2006
567     * Class::MOP::Class
568       - moved the metaclass cache out of here
569         and it is now in Class::MOP itself.
570
571     * Class::MOP
572       - moved all the metaclass cache stuff here
573         - fixed all tests for this
574
575     * Class::MOP::Attribute
576       - reference values (other than CODE refs)
577         are no longer allowed for defaults
578         - added tests for this
579
580     * Class::MOP::Package
581       - fixed an issue with perl 5.8.1 and how it deals
582         with symbol tables. The namespace hash is now
583         always reloaded from the symbol table.
584
585     ~ lots of misc. documentation cleanup
586
587 0.32 Sat. Aug. 12, 2006
588     + added Class::MOP::Object so that the
589       metamodel is more complete (and closer
590       to what Perl 6 will probably be).
591
592     * Class::MOP::Package
593       - refactored entire class, this is now
594         the primary gateway between the metaclass
595         and the Perl 5 symbol table
596         - added many tests for this
597       - this class is now a subclass of
598         Class::MOP::Object
599         - added some tests to reflect this
600
601     * Class::MOP::Class
602       - refactored all symbol table access to
603         use Class::MOP::Package methods instead
604
605     * Class::MOP::Module
606       - adding the $:version attribute in the bootstrap
607         so that Module has a version as an attribute
608         - see comment in Class::MOP for details
609       - added the $:authority attribute to this module
610         as well as an &identifier method, to bring us
611         ever closer to Perl 6 goodness
612         - I have added $AUTHORITY to all the modules
613         - added tests for this
614
615     * Class::MOP::Instance
616       - added &deinitialize_slot for removing slots
617         from an instance
618         - added tests for this
619
620     * Class::MOP::Attribute
621       - added support for &deinitialize_slot for removing
622         slots from an instance
623         - added tests for this
624
625 0.31 Sat. July 15, 2006
626
627     * Class::MOP::Class
628       - added &find_method_by_name to locate a method
629         anywhere within the class hierarchy
630
631     * Class::MOP::Attribute
632       - added &set_value and &get_value for getting
633         the value of the attribute for a particular
634         instance.
635
636 0.30 Wed. July 5, 2006
637     ---------------------------------------
638     This is the first version of Class::MOP
639     to introduce the immutable features which
640     will be used for optimizating the MOP.
641     This support should still be considered
642     experimental, but moving towards stability.
643     ---------------------------------------
644
645     * Created Class::MOP::Class::Immutable
646
647     * Created the Class::MOP::Package and
648       Class::MOP::Module classes to more
649       closely conform to Perl 6's meta-model
650
651     * Class::MOP::Class
652       - now inherits from Class::MOP::Module
653       - several methods moved to ::Module and
654         ::Package and now inherited
655         - added tests for this
656
657     * Class::MOP::Instance
658       - added an is_inlinable method to allow other
659         classes to check before they attempt to optimize.
660       - added an inline_create_instance to inline
661         instance creation (of course)
662
663     ** API CHANGE **
664       - the Class::MOP::Class::*_package_variable
665         methods are all now methods of Class::MOP::Package
666         and called *_package_symbol instead. This is
667         because they are now more general purpose symbol
668         table manipulation methods.
669
670 0.29_02 Thurs. June 22, 2006
671     ++ DEVELOPER RELEASE ++
672     * Class::MOP::Class
673       - small change in &create so that it behaves
674         properly when inherited
675       - small fix to &clone_instance
676
677 0.29_01 Fri. May 12, 2006
678     ++ DEVELOPER RELEASE ++
679       - This release works in combination with
680         Moose 0.09_01, it is a developer release
681         because it introduces a new instance
682         sub-protocol and has not yet been
683         optimized.
684
685     * Class::MOP::Class
686       - anon-classes are now properly garbage collected
687         - added tests for this
688       - improved method modifier wrapping
689
690     * Class::MOP::Instance
691       - added new instance protocol
692         - added tests for this
693       - changed all relevant modules and examples
694         - Class::MOP::Class
695         - Class::MOP::Attribute
696         - examples/*
697
698     * metaclass
699       - you no longer need to specify the metaclass
700         itself, if it is not there, Class::MOP::Class
701         is just assumed
702         - updated tests for this
703
704     * examples/
705       - added ArrayBasedStorage example to show
706         instance storage using ARRAY refs instead of
707         HASH refs.
708         - added tests for this
709       - InsideOutClass is totally revised using the
710         new instance protocol
711         - added more tests for this
712
713 0.26 Mon. April 24, 2006
714     * Class::MOP::Class
715       - added find_attribute_by_name method
716         - added tests and docs for this
717       - some small optimizations
718
719     * Class::MOP::Attribute
720       - some small optimizations
721
722 0.25 Thurs. April 20, 2006
723     * Class::MOP::Class
724       - added create_anon_class for creating anonymous classes
725         - added tests for this
726       - added get_all_metaclasses, get_all_metaclass_names
727         and get_all_metaclass_instances method to allow
728         access to all the cached metaclass objects.
729       - attribute slot initialization is now the responsibility
730         of the attribute itself, and construct_instance now
731         delegates appropriately
732
733     * Class::MOP::Attribute
734       - attribute slot initialization is now the responsibility
735         of the attribute itself, so we added a method for it
736         called initialize_instance_slot
737
738     * examples/
739       - adjusted all the examples to use the new attribute
740         initialize_instance_slot method
741
742 0.24 Tues. April 11, 2006
743     * Class::MOP::Class
744       - cleaned up how the before/after/around method
745         modifiers get named with Sub::Name
746
747 0.23 Thurs. March 30, 2006
748         * Class::MOP::Class
749           - fixed the way attribute defaults are handled
750             during instance construction (bug found by chansen)
751
752         * Class::MOP::Attribute
753           - read-only accessors ('reader') will now die if
754             passed more than one argument (attempting to write
755             to them basically)
756               - added tests for this
757               - adjusted all /example files to comply
758
759 0.22 Mon. March 20, 2006
760     * Class::MOP::Class
761       - localized $@ in the *_package_variable functions
762         because otherwise, it does ugly things in Moose.
763           - added test case for this
764
765 0.21 Wed. March 15, 2006
766     * Class::MOP::Class
767       - fixed issue where metaclasses are reaped from
768         our cache in global destruction, and so are not
769         available in DESTORY calls
770
771 0.20 Thurs. March 2, 2006
772     - removed the dependency for Clone since
773       we no longer to deep-cloning by default.
774
775     * Class::MOP::Method
776       - added &package_name, &name and
777         &fully_qualified_name methods, some of
778         which were formerly private subs in
779         Class::MOP::Class
780
781     * Class::MOP::Method::Wrapped
782       - allows for a method to be wrapped with
783         before, after and around modifiers
784           - added tests and docs for this feature
785
786     * Class::MOP::Class
787       - improved &get_package_symbol
788           - &version and &superclasses now use it
789       - methods are now blessed into Class::MOP::Method
790         whenever possible
791       - added methods to install CLOS-style method modifiers
792          - &add_before_method_modifier
793          - &add_after_method_modifier
794          - &add_around_method_modifier
795              - added tests and docs for these
796       - added &find_next_method_by_name which finds the
797         equivalent of SUPER::method_name
798
799 0.12 Thurs. Feb 23, 2006
800     - reduced the dependency on B, no need to always
801       have the latest
802
803     * examples/
804       - added docs to the C3 method dispatch order test
805       - fixed missing Algorithm::C3 dependency by making
806         the test skip if it is not installed
807
808 0.11 Mon Feb. 20, 2006
809     * examples/
810       - added example of changing method dispatch order to C3
811
812     * Class::MOP::Class
813       - changed how clone_instance behaves, it now only does a
814         shallow clone (see docs for more details)
815         - added docs and tests
816
817 0.10 Tues Feb. 14, 2006
818     ** This release was mostly about writing more tests and
819        cleaning out old and dusty code, the MOP should now
820        be considered "ready to use".
821
822     - adding more tests to get coverage up a little higher,
823       mostly testing errors and edge cases.
824       - test coverage is now at 99%
825
826     * Class::MOP
827       - no longer optionally exports to UNIVERSAL::meta or
828         creates a custom metaclass generator, use the
829         metaclass pragma instead.
830
831     * Class::MOP::Class
832       - fixed a number of minor issues which came up in the
833         error/edge-case tests
834
835     * Class::MOP::Attribute
836       - fixed a number of minor issues which came up in the
837         error/edge-case tests
838
839     * examples/
840       - fixing the AttributesWithHistory example, it was broken.
841
842 0.06 Thurs Feb. 9, 2006
843     * metaclass
844       - adding new metaclass pragma to make setting up the
845         metaclass a little more straightforward
846
847     * Class::MOP
848       - clean up bootstrapping to include more complete
849         attribute definitions for Class::MOP::Class and
850         Class::MOP::Attribute (accessors, readers, writers,
851         etc.) ... it is redundant, but is useful meta-info
852         to have around.
853
854     * Class::MOP::Class
855       - fixing minor meta-circularity issue with &meta, it
856         is now more useful for subclasses
857       - added &get_attribute_map as an accessor for the
858         hash of attribute meta objects
859       - &compute_all_applicable_attributes now just returns
860         the attribute meta-object, rather than the HASH ref
861         since all the same info can be gotten from the
862         attribute meta-object itself
863           - updated docs & tests to reflect
864       - added &clone_instance method which does a deep clone
865         of the instance structure created by &construct_instance
866           - added docs & tests for this
867           - added Clone as a dependency
868       - added &new_object and &clone_object convience methods to
869         return blessed new or cloned instances
870           - they handle Class::MOP::Class singletons correctly too
871           - added docs & tests for this
872       - cleaned up the &constuct_class_instance so that it behaves
873         more like &construct_instance (and managed the singletons too)
874       - added the &check_metaclass_compatibility method to make sure
875         that metaclasses are upward and downward compatible.
876           - added tests and docs for this
877
878     * examples/
879       - adjusting code to use the &Class::MOP::Class::meta
880         fix detailed above
881       - adjusting code to use the metaclass pragma
882
883 0.05 Sat Feb. 4, 2006
884     * Class::MOP::Class
885       - added the &attribute_metaclass and &method_metaclass
886         attributes which contain a metaclass name to use for
887         attributes/methods respectively
888
889     * Class::MOP
890       - bootstrap additional attributes for Class::MOP::Class
891
892     * examples/
893       - adjusted the example code and tests to use the new
894         &attribute_metaclass feature of Class::MOP::Class
895       - added new example:
896         - LazyClass
897
898 0.04 Fri Feb. 3, 2006
899     * Class::MOP::Class
900       - some documentation suggestions from #perl6
901
902     * Class::MOP::Attribute
903       - improved error messages
904
905     * examples/
906       - added new examples:
907         - AttributesWithHistory
908         - ClassEncapsultedAttributes
909
910 0.03 Fri Feb. 3, 2006
911     - converted to Module::Build instead of EU::MM
912
913     * Class::MOP::Attribute
914       - refactored method generation code
915       - attributes are now associated with class directly
916
917     * examples/
918       - refactored the InsideOut example to take advantage
919         of the Class::MOP::Attribute refactoring
920       - changed example files to .pod files and hide thier
921         package names from PAUSE (I don't want to own these
922         namespaces really, they are just examples)
923
924 0.02 Thurs Feb. 2, 2006
925     - moving examples from t/lib/* to examples/*
926         - adding POD documentation to the examples
927
928 0.01 Thurs Feb. 2, 2006
929     - Initial release