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