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