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