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