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