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