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