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