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