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