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