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