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