Tidy Changes
[gitmo/Class-MOP.git] / Changes
1 Revision history for Perl extension Class-MOP.
2
3 0.92
4     * Class::MOP::Class
5     * Class::MOP::Package
6       - Move get_method_map and its various scaffolding into Package. (hdp)
7
8     * Class::MOP::Method
9       - Allow Class::MOP::Method->wrap to take a Class::MOP::Method object as
10         the first argument, rather than just a coderef. (doy)
11
12     * Class::MOP::Attribute
13     * Class::MOP::Class
14       - Allow attribute names to be false (while still requiring them to be
15         defined). (rafl)
16
17 0.91 Wed Jul 29, 2009
18     * Class::MOP::Method::Wrapped
19       - Fixing variable usage issues with the patch from previous
20         version, not properly using lexicals in the for
21         loops. (stevan)
22
23 0.90 Tue Jul 21, 2009
24     Japan Perl Association has sponsored Goro Fuji to improve startup
25     performance of Class::MOP and Moose. These enhancements may break
26     backwards compatibility if you're doing (or using) complex
27     metaprogramming, so, as always, test your code!
28     http://blog.perlassociation.org/2009/07/jpa-sponsors-moose-class-mop-work.html
29
30     * Class::MOP::Class
31     * XS
32       - Anonymous classes were not completely destroyed when they went
33         out of scope, leading to a memory leak. RT #47480. (Goro
34         Fuji).
35
36     * Class::MOP::Class
37       - The get_method, has_method, and add_method methods no longer
38         use get_method_map. Method objects are instantiated
39         lazily. This significantly improves Class::MOP's load
40         time. (Goro Fuji)
41
42     * All classes
43       - Inline fewer metaclass-level constructors since the ones we
44         have are perfectly fine. This reduces the number of string
45         evals. (Goro Fuji)
46
47     * Class::MOP::Method::Wrapped
48       - If a method modifier set $_, this caused the modifier to blow
49         up, because of some weird internals. (Jeremy Stashewsky)
50
51 0.89 Fri Jul 3, 2009
52     * Class::MOP::Class
53     * Class::MOP::Class::Immutable::Trait
54       - Made the Trait act like a role with a bunch of "around"
55         modifiers, rather than sticking it in the inheritance
56         hierarchy. This fixes various problems that caused with
57         metaclass compatibility, which broke Fey::ORM.
58
59     * Class::MOP::Method
60       - Allow a blessed code reference as the method body. Fixes a
61         problem interaction with MooseX::Types. (ash)
62
63     * Class::MOP::Instance
64       - add inline version of rebless_instance_structure. (doy)
65       - change inline_slot_access to use single quotes (gphat)
66
67 0.88 Tue, Jun 23, 2009
68     * Class::MOP::Class
69       - Moved the __INSTANCE__ parameter to _construct_instance from
70         Moose to here. (doy)
71       - Fixed some issues involving metaclasses of metaclasses and
72         immutability. (doy)
73
74 0.87 Sun, Jun 21, 2009
75     * Various
76       - Made sure to always local-ize $@ and $SIG{__DIE__} before
77         calling an eval. Fixes RT #45973.
78
79     * Class::MOP::Class
80       - Synced docs about immutability with the current reality (which
81         changed back in 0.82_01)
82       - Removed the immutable_transformer method, which had been
83         returning undef since 0.82_01 anyway.
84
85     * Tests
86       - Got rid of tests which needed Moose and improved testing of
87         constructor/destructor inlining warnings. Fixes RT #47119.
88
89 0.86 Tue, Jun 16, 2009
90     * Class::MOP::Class
91       - If you redefined a subroutine at runtime and then wrapped it
92         with a method modifier, the modifier could in some cases wrap
93         the original version of the subroutine. Fixes RT #46957.
94
95     * Class::MOP::Class
96       - make_immutable issues a warning instead of overriding an
97         existing DESTROY method (Dylan William Hardison). Fixes RT
98         #46854.
99
100 0.85 Sat, Jun 6, 2009
101     * Class::MOP::Attribute
102       - Allow default values to be Class::MOP::Methods.  (Florian
103         Ragwitz)
104       - Test the above. (Rhesa Rozendaal)
105       - Tweak original commit so the intent matches the accepted
106         behavior (Nicholas Perez)
107
108     * Class::MOP
109       - Localize $SIG{__DIE__} inside _try_load_one_class (Sartak)
110
111     * Class::MOP::Class
112       - Add direct_subclasses method (Sartak)
113         - Tests for subclasses and direct_subclasses (Sartak)
114       - subname is no longer used unconditionally in add_method, but
115         only if the code reference's name is '__ANON__' (nothingmuch)
116       - Add a hook for _superclasses_updated (Sartak)
117
118     * Class::MOP::Method
119       - Remove long, old warning about possibly outdated modules
120         (Sartak)
121
122 0.84 Tue, May 12, 2009
123     * Makefile.PL
124       - Depend on Text::Exception 0.27 to avoid failing tests ond old
125         versions (rafl)
126
127     * Class::MOP
128       - Made is_class_loaded a little stricter. It was reporting that
129         a class was loaded if it merely had an @ISA variable in its
130         stash. Now it checks that the @ISA var has elements in it.
131       - Deprecate in_global_destruction and subname re-exporting
132         (perigrin & Sartak)
133
134     * Class::MOP::Class
135       - Explicitly use Devel::GlobalDestruction and Sub::Name
136         (perigrin)
137
138     * Class::MOP::Package
139       - Disable prototype mismatch warnings for add_package_symbol.
140         (Florian Ragwitz)
141     * Tests
142       - Add test for finding methods from $meta->name->meta before immutable,
143         (t0m)
144
145 0.83 Mon, April 27, 2009
146     * Class::MOP::Class
147       - Fix segfault when calling get_method_map on a metaclass for an empty
148         package (doy)
149
150 0.82_02 Fri, April 24, 2009
151     * Class::MOP::Method::Inlined
152       - Don't inline if the expected method is not defined at all (happens with
153         e.g. Moose::Object::_new is the expected method due to an overridden
154         name)
155     * Tests
156       - Some tests were trying to load Class::MOP::Immutable, which
157         was removed in 0.82_01.
158
159 0.82_01 Thu, April 23, 2009
160     * Class::MOP::Immutable (and others)
161       - Refactor the immutability system to use a pre-defined class
162         for the immutable metaclass of Class::MOP::Class::Immutable::$class
163       - Rather than generating methods into this class every time, use
164         a Trait (basic mixin) to supply the cached methods
165       - Remove the hack that returns the mutable metaclass for
166         metacircularity in order to provide consistent meta-metaclasses
167         for the Moose compatibility handling code
168         (mst broke it, nothingmuch fixed it)
169
170 0.82 Mon, April 20, 2009
171     * Various
172       - The deprecation wrappers for some renamed methods were not
173         passing arguments to the new method. (nothingmuch)
174
175     * Class::MOP::Immutable
176       - Warn during immutablization if the local class provides its own
177         constructor, to parallel the warning in Moose when a superclass
178         provides its own constructor (doy)
179
180 0.81 Tue, April 7, 2009
181     * Class::MOP
182     * Class::MOP::Class
183     * Class::MOP::Instance
184     * Class::MOP::Attribute
185     * Class::MOP::Method::Accessor
186     * Class::MOP::Method::Constructor
187       - Include stack traces in the deprecation warnings introduced in
188         0.80_01. (Florian Ragwitz)
189
190     * MOP.xs
191       - Avoid c compiler warnings by declaring some unused function
192         arguments. (Florian Ragwitz)
193
194 0.80_01 Sun, April 5, 2009
195     * Makefile.PL
196       - Make sure to preserve any compiler flags already defined in
197         Config.pm. Patch by Vincent Pit. RT #44739.
198
199     * Many methods have been renamed with a leading underscore, and a
200       few have been deprecated entirely. The methods with a leading
201       underscore are consider "internals only". People writing
202       subclasses or extensions to Class::MOP should feel free to
203       override them, but they are not for "public" use.
204
205       - Class::MOP::Class
206         - construct_class_instance => _construct_class_instance (use new_object)
207         - construct_instance => _construct_instance (use new_object)
208         - check_metaclass_compatibility => _check_metaclass_compatibility
209         - create_meta_instance => _create_meta_instance (use get_meta_instance)
210         - clone_instance => _clone_instance (use clone_object)
211         - compute_all_applicable_methods is deprecated, use get_all_methods
212         - compute_all_applicable_attributes is deprecated, use get_all_attributes
213
214       - Class::MOP::Instance
215         - bless_instance_structure is deprecated and will be removed
216           in a future release
217
218       - Class::MOP::Module
219         - create has been renamed to _instantiate_module. This method
220           does not construct an object, it evals some code that
221           creates the relevant package in Perl's symbol table.
222
223       - Class::MOP::Method::Accessor
224         - initialize_body => _initialize_body (this is always called
225           when an object is constructed)
226         - /(generate_.*_method(?:_inline)?)/ => '_' . $1
227
228       - Class::MOP::Method::Constructor
229         - initialize_body => _initialize_body (this is always called
230           when an object is constructed)
231         - /(generate_constructor_method(?:_inline)?)/ => '_' . $1
232         - attributes => _attributes
233         - meta_instance => _meta_instance
234
235 0.80 Wed, April 1, 2009
236     * Class::MOP::*
237       - Call user_class->meta in fewer places, with the eventual goal
238         of allowing the user to rename or exclude ->meta
239         altogether. Instead uses Class::MOP::class_of. (Sartak)
240
241     * Class::MOP
242       - New class_of function that should be used to retrieve a
243         metaclass. This is unlike get_metaclass_by_name in that it
244         accepts instances, not just class names. (Sartak)
245
246     * Class::MOP
247       - load_first_existing_class didn't actually load the first
248         existing class; instead, it loaded the first existing and
249         compiling class.  It now throws an error if a class exists (in
250         @INC) but fails to compile.  (hdp)
251
252     * Class::MOP
253     * Class::MOP::Class
254       - we had some semi-buggy code that purported to provide a
255         HAS_ISAREV based on whether mro had get_isarev (due to an
256         oversight, it always returned 1). Since mro and MRO::Compat
257         have always had get_isarev, HAS_ISAREV was pointless. This
258         insight simplified the subclasses method by deleting the
259         pure-perl fallback. HAS_ISAREV is now deprecated. (Sartak)
260
261 0.79 Fri, March 29, 2009
262     * No changes from 0.78_02.
263
264 0.78_02 Thu, March 26, 2009
265     * Class::MOP::Class
266     * Class::MOP::Immutable
267       - A big backwards-incompatible refactoring of the Immutable API,
268         and the make_immutable/make_mutable pieces of the Class
269         API. The core __PACKAGE__->meta->make_immutable API remains
270         the same, however, so this should only affect the most
271         guts-digging code.
272
273     * XS code
274       - The XS code used a macro, XSPROTO, that's only in 5.10.x. This
275         has been fixed to be backwards compatible with 5.8.x.
276
277     * Class::MOP::Class
278       - Add a hook for rebless_instance_away (Sartak)
279       - Use blessed instead of ref to get an instance's class name
280         in rebless_instance. (Sartak)
281
282 0.78_01 Wed, March 18, 2009
283     * Class::MOP::*
284       - Revised and reorganized all of the API documentation. All
285         classes now have (more or less) complete API documentation.
286
287     * Class::MOP::Class
288     * Class::MOP::Instance
289       - Reblessing into a package that supports overloading wasn't
290         properly adding overload magic to the object due to a bug
291         in (at least) 5.8.8. We now use $_[1] directly which seems
292         to set the magic properly. (Sartak)
293
294     * Class::MOP::Attribute
295       - The process_accessors method is now private. A public alias
296         exists (and will stick around for a few releases), but it
297         warns that calling the public method is deprecated.
298
299     * Class::MOP::Method::Generated
300       - Removed the new and _new methods, since this is an abstract
301         base class, and all existing subclasses implement their own
302         constructors.
303
304     * MOP.xs
305       - Stop is_class_loaded from thinking a class is loaded if it
306         only has an empty GV (Florian Ragwitz).
307         - Add a test for this (Yappo).
308       - Refactor get_all_package_symbols to allow short-circuiting
309         (Florian Ragwitz).
310         - Use this in is_class_loaded (Florian Ragwitz).
311       - Stop segfaulting when trying to get the name from a sub that's
312         still being compiled (Florian Ragwitz).
313         - Add tests for this (Florian Ragwitz).
314       - Prefix all public symbols with "mop_" (Florian Ragwitz).
315       - Clean up and simplify prehashing of hash keys (Florian Ragwitz).
316       - Simplify creating simple xs reader methods (Florian Ragwitz).
317       - Make everything compile with c++ compilers (Florian Ragwitz).
318       - Upgrade ppport.h from 3.14 to 3.17 (Florian Ragwitz).
319
320     * Tests
321       - Remove optional test plans for tests depending on Sub::Name as
322         we have a hard dependency on Sub::Name anyway (Florian Ragwitz).
323
324     * Makefile.PL
325       - Rebuild all c code if mop.h has changed (Florian Ragwitz)
326
327 0.78 Mon, February 23, 2009
328     * No changes from 0.77_01
329
330 0.77_01 Sun, February 22, 2009
331     * Everything
332       - This package now requires its XS components. Not using
333         Sub::Name lead to different behavior and bugginess in the pure
334         Perl version of the code. A Moose test would fail when run
335         against the pure Perl version of this code.
336
337     * Class::MOP::Instance
338       - The inline_* methods now quote attribute names themselves, and
339         don't expect to receive a quoted value.
340
341
342 0.77 Sat, February 14, 2009
343     * MOP.xs
344       - Avoid assertion errors on debugging perls in is_class_loaded
345         (Florian Ragwitz)
346
347     * Class::MOP
348       - Fixed various corner cases where is_class_loaded incorrectly
349         returned true for a class that wasn't really loaded. (Dave
350         Rolsky)
351
352     * Class::MOP::Class
353       - Add get_all_method_names (Sartak)
354       - Add a wrapped_method_metaclass attribute (Florian Ragwitz)
355
356     * Class::MOP::Package
357       - Disable deprecated get_all_package_symbols in list
358         context. (Florian Ragwitz)
359
360     * Makefile.PL
361       - Make sure we generate a BSD-compatible Makefile (Florian
362         Ragwitz)
363
364     * Class::MOP::Class
365       - The misspelled "check_metaclass_compatability" method we've
366         kept around for backwards compat_i_bility will be removed in a
367         near future release. You've been warned.
368
369 0.76 Thu, January 22, 2009
370     * Class::MOP::Method::Generated
371       - Added new private methods to support code generation, which
372         are being used by Moose and can be used by MooseX
373         authors. (mst)
374       - Generated methods are now generated with a #line directive
375         reflecting the source of the generated method. (nothingmuch)
376
377     * Class::MOP::Class
378       - Clarified documentation of methods that return
379         Class::MOP::Method objects. (doy)
380
381     * Class::MOP
382       - Clarified documentation of the metaclass cache methods. (Sartak)
383
384     * Tests
385       - Add test showing how the xs Class::MOP::is_class_loaded can
386         be made to operate differently to the pure perl version (t0m)
387
388 0.75 Wed, December 31, 2008
389     * Class::MOP::Class
390       - A class that was made immutable and then mutable could end up
391         sharing an immutable transformer object
392         (Class::MOP::Immutable) with other classes, leading to all
393         sorts of odd bugs. Reported by t0m. (Dave Rolsky)
394
395 0.74 Tue, December 25, 2008
396     * MOP.xs
397       - Add an xs implementation of Class::MOP::is_class_loaded (closes
398         RT#41862). Based on a patch by Goro Fuji. (Florian Ragwitz)
399       - Changed internals to make prehashing of hash keys easier and less
400         error-prone. (Florian Ragwitz)
401     * Class::MOP::Class
402       - Fix documentation to show that around modifiers happen on both
403         sides of the modified method. (Dave Rolsky)
404
405 0.73 Tue, December 16, 2008
406     * MOP.xs
407       - Don't use Perl_mro_meta_init. It's not part of the public perl
408         api. Fixes failures to build on Win32 (RT #41750).  (Florian
409         Ragwitz)
410     * t/082_get_code_info.t
411       - Add $^P &= ~0x200; (per Ovid's suggestion) in order to not
412         munger anonymous subs when under -d and so making the tests
413         succeed in that case.
414
415 0.72 Mon, December 8, 2008
416     * Class::MOP::Package
417       - Pass options to _new, so subclass' attributes can be
418         initialized (Sartak)
419     * Class::MOP::Method
420       - In the docs, indicate that package_name and name are required
421         when calling ->wrap (Stefan O'Rear)
422
423 0.71_02 Fri, December 5, 2008
424     * Class::MOP::Immutable
425       - Added a new attribute, inlined_constructor, which is true if
426         the constructor was inlined.
427     * Class::MOP::Package
428       - Make get_all_package_symbols return a hash ref in scalar
429         context and deprecate calling it in list context with a
430         warning. (Florian Ragwitz)
431     * MOP.xs
432       - Various improvements and refactoring, making things more robust and
433         easier to maintain. (Florian Ragwitz)
434
435 0.71_01 Wed, December 3, 2008
436     * Class::MOP::Method
437       - Add an "execute" method to invoke the body so
438         we can avoid using the coderef overload (Sartak)
439     * Class::MOP::Immutable
440       - When we memoize methods, get their results lazily
441         to remove some compile-time cost (Sartak)
442       - Small speedup from eliminating several method
443         calls (Sartak)
444     * Class::MOP::Class
445       - Some small internal tweaks to try to reduce the number of
446         times we call get_method_map when bootstrapping the MOP. This
447         might make loading Class::MOP (and Moose) a little
448         faster. (Dave Rolsky)
449       - Implemented an optional XS version of get_method_map. Mostly
450         taken from a patch by Goro Fuji (rt.cpan.org #41080), with
451         help form Florian Ragwitz. (Dave Rolsky)
452       - Make the behaviour of of get_all_package_symbols (and
453         therefore get_method_map) consistent for stub methods. Report
454         and test by Goro Fuji (rt.cpan.org #41255). (Florian Ragwitz)
455
456 0.71 Wed November 26, 2008
457     * Class::MOP::Class
458     * Class::MOP::Module
459       - Actual package creation has moved upward from
460         Class to Module so that Moose roles can share
461         the code (Sartak)
462
463 0.70_01 Mon, November 19, 2008
464     * Class::MOP
465       - Fixes for failures with blead (Florian Ragwitz)
466       - Silenced compiler warnings (Florian Ragwitz)
467
468 0.70 Fri, November 14, 2008
469     * Class::MOP
470       - Fixed an odd corner case where the XS version of
471         get_all_package_symbols could cause a segfault. This only
472         happened with inlined constants in Perl 5.10.0 (Florian
473         Ragwitz)
474
475 0.69 Fri, November 7, 2008
476     * Class::MOP::Method::Wrapped
477       - Added introspection methods for method modifiers (Dave Rolsky)
478
479
480 0.68 Fri October 24, 2008
481     * Class::MOP
482       - Make load_class require by file name instead of module name.
483         This stops confusing error messages when loading '__PACKAGE__'.
484         (Florian Ragwitz)
485       - Add load_one_class_of function to enable you to load one of a
486         list of classes, rather than having to call load_class multiple
487         times in an eval. (t0m)
488
489 0.67 Tue October 14, 2008
490     * Class::MOP::Class
491       - Call a method on the class after setting the superclass list
492         so that we can get Perl to detect cycles before MRO::Compat
493         spirals into an infinite loop (sartak)
494         - Reported by Schwern, [rt.cpan.org #39001]
495       - In create(), pass unused options on to initialize()
496         - added test for this
497
498 0.66 Sat September 20, 2008
499     !! This release has an incompatible change regarding !!
500        introspection of a class's method with Class::MOP::Class !!
501
502     * Tests and XS
503       - We (us maintainers) now run all tests with XS and then without
504         XS, which should help us catch skew between the XS/pure Perl
505         code. (Dave Rolsky)
506
507     * Class::MOP::Class
508       ! The alias_method method has been deprecated. It now simply
509         calls add_method instead. There is no distinction between
510         aliased methods and "real" methods.
511
512         This means that methods added via alias_method now show up as
513         part of the class's method list/map. This is a backwards
514         incompatible change, but seems unlikely to break any
515         code. Famous last words. (Dave Rolsky)
516
517     * Class::MOP::Class
518       - Fixed the spelling of "compatibility", but we still have a
519         "check_metaclass_compatability" method for backwards
520         compatibility.
521
522 0.65 Mon September 1, 2008
523     For those not following the series of dev releases, the changes
524     from 0.64 from 0.65 can mostly be summed up as a lot performance
525     improvements by nothingmuch, including new optional XS versions of
526     some methods. Also, Class::MOP now works _without_ any XS modules,
527     for sad systems without a compiler.
528
529     * Class::MOP::Method
530       - Added name and package_name XS accessors, and make sure all
531         the XS and Perl versions work the same way. (Dave Rolsky)
532
533     * MOP.xs
534       - The XS versions of various methods just returned undef when
535         called class methods, rather than dying like the pure Perl
536         versions. (Dave Rolsky)
537
538 0.64_07 Fri August 29, 2008
539     * Class::MOP
540       - Silenced warnings that managed to break Moose tests when XS
541         was loaded. (Dave Rolsky)
542       - Some XS versions of methods were ignored because of typos in
543         MOP.xs. (Dave Rolsky)
544
545 0.64_06 Mon August 25, 2008
546     * Class::MOP (MOP.xs)
547       - Another MS VC++ fix, cannot declare a variable in the middle
548         of a scope (Taro Nishino).
549
550 0.64_05 Sun August 24, 2008
551     * Class::MOP
552       - None of the dev releases actually loaded the XS properly, but
553         we silently fell back to the pure Perl version of the
554         code. (Dave Rolsky)
555
556     * Class::MOP (MOP.xs)
557       - Replaced some code that used functions not available on Visual
558         C++ with some Perl XS API bits (Dave Rolsky).
559
560 0.64_04 Sat August 23, 2008
561     * Class::MOP::Class
562       - Workaround a bug in 5.8.1's goto sub (nothingmuch)
563
564     * pod.t and pod_coveraget.t
565       - These are no longer shipped with the tarball because of bogus
566         failures from CPAN testers. (Dave Rolsky)
567
568 0.64_03 Thu August 21, 2008
569     * Class::MOP::Package
570       - Some (legit) code was misparsed by earlier 5.8.x
571         releases. (nothingmuch)
572
573     * Class::MOP
574       - Fix a constant in void context warning (nothingmuch)
575
576 0.64_02 Thu August 21, 2008
577     * Makefile.PL and Class::MOP
578       - Explicitly require Perl 5.8.0+ (Dave Rolsky)
579
580     * Makefile.PL
581       - Add missing prereqs that got lost in the switch away from
582         Module::Install.
583
584     * Class::MOP::Instance
585       - New method - get_all_attributes (nothingmuch)
586
587 0.64_01 Wed August 20, 2008
588     * Makefile.PL
589       - We now check to see if you have a compiler. If you don't, the
590         module installs without some XS bits, but will work the same
591         as with XS. This should make it easier to install on platforms
592         without a compiler (like Windows). (Dave Rolsky)
593
594     * many modules
595       - Perl 6 style attribute naming replaced with sane style ('methods', not
596         '%!methods'). These changes should not impact any existing API uses.
597         (nothingmuch).
598
599     * many modules
600       - Quite a number of optimizations based on profiling, including
601         allowing constructors to take hash references instead of
602         hashes, duplicating some frequently used code in XS, and
603         making constructors immutable. These changes should not impact
604         any existing API uses. (nothingmuch)
605
606     * Many modules
607       - Constructors now respect the meta attributes of their subclasses,
608         facilitating MOP extensibility. More related changes will happen in the
609         next several releases. (nothingmuch)
610
611     * Class::MOP::Class
612       - New method - get_all_methods, replaces the deprecated
613         compute_all_applicable_methods. get_all_attributes provided for
614         consistency (nothingmuch)
615       - New method - wrap_method was refactored out of get_method_map
616         (nothingmuch)
617       - New API for meta instance invalidation - invalidate_meta_instance,
618         invalidate_meta_instances, add_dependent_meta_instance,
619         remove_dependent_meta_instance, called automatically when attribute
620         definitions change and allows notification of dependent subclasses.
621         (nothingmuch)
622
623 0.64 Sun August 3, 2008
624     * Class::MOP::Immutable
625       - fixing subtle edge case in immutable when you
626         call ->meta (stevan)
627       - clean up option processing (nothingmuch)
628
629     * Class::MOP::Instance
630       - inlined initialize slot didn't match
631         non-inlined (nothingmuch)
632
633 0.63 Mon July 7, 2008
634     * Class::MOP
635       - load_class will initialize a metaclass even if
636         the class is already loaded (sartak)
637       - load_class now returns the metaclass instance
638         instead of just 1 (sartak)
639
640     * elsewhere
641       - better error messages (sartak and Dave Rolsky)
642
643 0.62 Wed June 18, 2008
644     - in is_class_loaded, recognize scalar references (as opposed to globs) in
645       the symbol table as methods (these are optimized constant subs)
646
647 0.61 Fri. June 13, 2008
648     - Okay, lets give this another try and see if PAUSE
649       recognizes it correct this time.
650
651 0.60 Thurs. Jun 12, 2008
652     - Fixed a version number issue by bumping all modules
653       to 0.60.
654
655 0.59 Thurs. Jun 12, 2008
656     !! Several fixes resulting in yet another 25-30% speedup !!
657
658     * Class::MOP::Class
659       - now stores the instance of the instance
660         metaclass to avoid needless recomputation
661         and deletes it when the cache is blown
662       - introduce methods to query Class::MOP::Class for
663         the options used to make it immutable as well as
664         the proper immutable transformer. (groditi)
665
666     * Class::MOP::Package
667       - {add, has, get, remove}_package_symbol all
668         now accept a HASH ref argument as well as the
669         string. All internal usages now use the HASH
670         ref version.
671
672     * Class::MOP
673       - MOP.xs does sanity checks on the coderef
674         to avoid a segfault
675       - is_class_loaded check now uses code that
676         was improved in Moose's ClassName type
677         check (Sartak)
678       - nonsensical (undef, empty, reference) class
679         names now throw a more direct error in
680         load_class (Sartak)
681         - tests for this and other aspects of
682           load_class (Sartak)
683
684     * Class::MOP
685       Class::MOP::Class
686       Class::MOP::Method
687       Class::MOP::Method::Wrapped
688       Class::MOP::Attribute
689       - switched usage of reftype to ref because
690         it is much faster
691
692 0.58 Thurs. May 29, 2008
693     (late night release engineering)--
694
695     - fixing the version is META.yml, no functional
696       changes in this release
697
698 0.57 Wed. May 28, 2008
699     !! Several speedups resulting in 20-25% speedups !!
700     || (thanks to konobi, groditi, mst & CataMoose) !!
701
702     * Class::MOP::Class
703       - made get_method_map use list_all_package_symbols
704         instead of manually grabbing each symbol
705       - streamlining &initialize somewhat, since it gets
706         called so much
707
708     * Class::MOP::Package
709       - made {get, has}_package_symbol not call
710         &namespace so much
711       - inlining a few calls to &name with
712         direct HASH access key access
713       - added get_all_package_symbols to fetch
714         a HASH of items based on a type filter
715         similar to list_all_package_symbols
716         - added tests for this
717
718     * Class::MOP::Method
719       Class::MOP::Method::Constructor
720       Class::MOP::Method::Generated
721       Class::MOP::Method::Accessor
722       - added more descriptive error message to help
723         keep people from wasting time tracking an error
724         that is easily fixed by upgrading.
725
726     * Class::MOP::Immutable
727       - Don't inline a destructor unless the user actually
728         needs one
729         - added tests for this
730
731 0.56 Saturday, May 24, 2008
732     * Class::MOP
733       - we now get the &check_package_cache_flag
734         function from MRO::Compat
735       - All XS based functionality now has a
736         Pure Perl alternative
737         - the CLASS_MOP_NO_XS environment variable
738           can now be used to force non-XS versions
739           to always be used
740
741     * Class::MOP::Attribute
742       - add has_read_method and has_write_method
743       - get_{read,write}_method_ref now wraps the
744         anon-sub ref in the method metaclass when
745         possible
746         - added tests for this
747
748     * Class::MOP::Immutable
749       - added the ability to "wrap" methods when
750         making the class immutable
751
752     * Class::MOP::Class
753       - now handling the edge case of ->meta->identifier
754         dying by wrapping add_package_symbol to specifically
755         allow for it to work.
756         - added tests for this
757
758     * Class::MOP::Attribute
759       Class::MOP::Class
760       Class::MOP::Immutable
761       - any time a method meta object is constructed
762         we make sure to pass the correct package and
763         method name information
764
765     * Class::MOP::Method
766       Class::MOP::Method::Wrapped
767       Class::MOP::Method::Generated
768       Class::MOP::Method::Accessor
769       Class::MOP::Method::Consructor
770       - the &wrap constructor method now requires that a
771         'package_name' and 'name' attribute are passed. This
772         is to help support the no-XS version, and will
773         throw an error if these are not supplied.
774       - all these classes are now bootstrapped properly
775         and now store the package_name and name attributes
776         correctly as well
777
778     ~ Build.PL has been removed since the
779       Module::Install support has been removed
780
781 0.55 Mon. April 28, 2008
782     - All classes now have proper C3 MRO support
783       - added MRO::Compat as a dependency to allow
784         for the C3 MRO support to Just Work in all
785         perl versions
786
787     * Class::MOP::Class
788       - rebless_instance now returns the instance
789         it has just blessed, this is mostly to
790         facilitate chaining
791       - set the attr correctly in rebless_instance
792         when it has no init_arg
793       - tweaked &linear_isa and &class_precedence_list
794         to support c3 classes.
795
796 0.54 Fri. March, 14, 2008
797     * Class::MOP
798       metaclass.pm
799       - making sure that load_class never gets
800         passed a value from @_ or $_ to squash
801         Ovid's bug (http://use.perl.org/~Ovid/journal/35763)
802
803     * Class::MOP::Class
804       - make_{immutable,mutable} now return 1
805         (cause Sartak asked)
806       - improved error handling in ->create method
807       - rebless_instance now takes extra params which
808         will be used to populate values
809         - added tests for this
810
811     * Class::MOP::Object
812       - localizing the Data::Dumper configurations so
813         that it does not pollute others (RT #33509)
814
815     * Class::MOP::Class
816       Class::MOP::Package
817       Class::MOP::Module
818       Class::MOP::Method
819       Class::MOP::Attribute
820       - these classes no longer define their own ->meta,
821         but instead just inherit from Class::MOP::Object
822
823     * Class::MOP::Instance
824       Class::MOP::Immutable
825       - these classes now inherit from Class::MOP::Object
826
827     * t/
828       - fixed the filename length on several
829         test files so we install on VMS better
830         (RT #32295)
831       - fixed incorrect use of catdir when it
832         should be catfile (RT #32385)
833
834 0.53 Thurs. Feb. 14, 1008
835     ~~ several doc. fixes and updates ~~
836
837     * Class::MOP::Class
838       Class::MOP::Method::Constructor
839       Class::MOP::Attribute
840         - making init_arg accept an undefined value
841           to indicate that no constructor args can
842           be passed (thanks to nothingmuch)
843           - added tests for this
844         - added attribute initializer attribute (rjbs)
845
846     * Class::MOP.
847         - making this use the new init_arg => undef
848           feature instead of the silly hack from
849           before (thanks to nothingmuch)
850
851 0.52 Tues. Jan. 22, 2008
852     * Class::MOP::Class
853       - fixed bug in rebless_instance
854         (discovered by ash)
855
856     * Class::MOP::Method::Constructor
857       - removed assumptions about the existence of
858         a &meta method
859
860 0.51 Mon. Jan. 14, 2008
861     ~~~ some misc. doc. fixes ~~~
862     ~~ updated copyright dates ~~
863
864     * Class::MOP
865       - now sets the IS_RUNNING_ON_5_10
866         constant so that we can take advantage
867         of some of the nice bits of 5.10
868
869     * Class::MOP::Class
870       - uses the IS_RUNNING_ON_5_10 flag to
871         optimize the &linearized_isa method
872         and avoid the hack/check for circular
873         inheritence in &class_precedence_list
874       - added rebless_instance method (Sartak)
875         - added tests for this
876
877     * Class::MOP::Immutable
878       - the immutable class now keeps track of
879         the transformer which immutablized it
880
881     * Class::MOP::Instance
882       - added rebless_instance_structure method (Sartak)
883         - added tests for this
884
885 0.50 Fri. Dec. 21, 2007
886     * Class::MOP::Class
887       - fixed bug in immutable to make sure that
888         transformation arguments are saved
889         correctly (mst)
890         - added tests for this
891
892     * Class::MOP::Immutable
893       - fixed a bug (see above)
894
895     * Class::MOP::Attribute
896       - some doc updates
897
898 0.49 Fri. Dec. 14, 2007
899     !! Class::MOP now loads 2 x faster  !!
900     !! with XS speedups (thanks konobi) !!
901
902     * Class::MOP
903       - removed the dependency on B
904       - added two XS functions (thanks konobi)
905         - get_code_info($code) which replaces all
906           the B fiddling we were doing with
907           faster/leaner XS level fiddling
908         - check_package_cache_flag($pkg_name) which
909           returns the PL_sub_generation variable to
910           be used to help manage method caching.
911
912           NOTE:
913           In 5.10 or greater this will actually
914           use the mro::get_pkg_gen instead to give
915           even more accurate caching information.
916           blblack++ for that stuff :)
917
918     * Class::MOP::Class
919       - added the &subclasses method (thanks rlb)
920       - added the update_package_cache_flag and
921         reset_package_cache_flag which help keep
922         track of when we need to re-fetch the
923         method map.
924       - Several small improvements to take advantage
925         of the new method map caching features
926
927 0.48 Mon. Nov. 26, 2007
928     * Class::MOP::Attribute
929       - fixed get_read/write_method to handle the
930         HASH ref case, which makes the
931         get_read/write_method_ref handle it too.
932         - added more tests for this
933
934 0.47 Sat. Nov. 24, 2007
935     * Class::MOP::Attribute
936       - fixed misspelling in get_write_method_ref
937         - added more tests for this
938
939 0.46 Fri. Nov. 23, 2007
940     * Class::MOP::Class
941       - added the linearized_isa method instead of constantly
942         pruning duplicate classes (this will be even more
943         useful in the 5.10-compat version coming soon)
944
945     * Class::MOP::Attribute
946       - added the get_read_method_ref and get_write_method_ref
947         methods which allow you to retrieve a CODE ref which
948         can always be used to read or write an attribute.
949
950 0.45 Thurs. Nov. 13, 2007
951     * Class::MOP::Attribute
952       - Fix error message on confess (groditi)
953
954 0.44 Thurs. Nov. 13, 2007
955     - Apparently I didn't make dist correctly (groditi)
956
957 0.43 Thurs. Nov. 13, 2007
958     * Class::MOP
959       - Add support for the 'builder' attribute (groditi)
960
961     * Class::MOP::Class
962       - optimise metaclass-already-exists check in
963         construct_class_instance (groditi)
964       - duplicate check into initialize to save a
965         call through (groditi)
966
967     * Class::MOP::Attribute
968       - Add support for the 'builder' attribute (groditi)
969       - Make predicates check for the existence of a value, not whether
970         it is defined (groditi)
971
972     * Class::MOP::Instance
973       - Make predicates check for the existence of a value, not whether
974         it is defined (groditi)
975
976     * Class::MOP::Method::Accessor
977       - made this a subclass of Class::MOP::Method::Generated
978         - removed the relevant attributes
979
980     * Class::MOP::Method::Constructor
981       - fixed the cached values we had to be more sane
982       - made this a subclass of Class::MOP::Method::Generated
983       - fixed generated constructor so it properly handles
984         subclasses now.
985         - added tests for this
986       - added the option to allow for both inlined and
987         non-inlined constructors.
988       - Update inlined methods for builder and predicate changes (groditi)
989
990     * Class::MOP::Method::Generated
991       - added this class as an abstract base for the
992         Class::MOP::Method::{Constructor,Accessor} classes
993         - added tests for this
994
995     *t/
996       - Alter tests (005, 014 020, 021) for new builder addition (groditi)
997       - Tests for new predicate behavior (and corrections to old tests) (groditi)
998
999     *examples/
1000       - Update ArrayRef based class example to work with predicate changes
1001
1002 0.42 Mon. July 16, 2007
1003     !!! Horray for mst, he fixed it !!!
1004
1005     * Class::MOP::Package
1006       - alter symbol table handling to deal with 5.8.x and 5.9.x
1007
1008     * t/
1009       - Get rid of the crappy workaround from 0.40/41
1010
1011 0.41 Sun. July 15, 2007
1012     * t/
1013         Arghh!!! My TODO test didn't work, so I handle
1014         it manually now so that people can use this
1015         with 5.9.5/bleadperl without issue.
1016
1017 0.40 Tues, July 3, 2007
1018     * t/
1019       ~ marked a test in 003_methods.t as TODO
1020         for perl 5.9.5 (this test is irrelvant to
1021         the module functioning on 5.9.5 for the most
1022         part anyway)
1023
1024 0.39 Mon. June 18, 2007
1025     * Class::MOP::Immutable
1026       - added make_metaclass_mutable + docs (groditi)
1027       - removed unused variable
1028       - added create_immutable_transformer
1029         necessary for sane overloading of immutable behavior
1030          - tests for this (groditi)
1031
1032     * Class::MOP::Class
1033       - Immutability can now be undone,
1034         added make_mutable + tests + docs (groditi)
1035       - Massive changes to the way Immutable is done
1036         for details see comments next to make_immutable
1037         This fixes a bug where custom metaclasses broke
1038         when made immutable. We are now keeping one immutable
1039         metaclass instance per metaclass instead of just one
1040         to prevent isa hierarchy corruption. Memory use will go
1041         up, but I suspect it will be neglible.
1042          - New tests added for this behavior.  (groditi)
1043
1044 0.38 Thurs. May 31, 2007
1045     ~~ More documentation updates ~~
1046
1047     * Class::MOP::Package
1048       - we now deal with stub methods properly
1049         - added tests for this
1050       - fixed some tests failing on 5.9.5 (thanks blblack)
1051
1052     * Class::MOP::Attribute
1053       - added get_read_method and get_write_method
1054         thanks to groditi for this code, tests
1055         and docs.
1056         - added tests and POD for this
1057
1058     * Class::MOP::Class
1059       - fixed RT issue #27329, clone object now
1060         handles undef values correctly.
1061         - added tests for this
1062       - Corrected anon-class handling so that they
1063         will not get reaped when instances still
1064         exist which need to reference them. This is
1065         the correct behavior, hopefully this is an
1066         obscure enough feature that there are not too
1067         many work arounds out in the wild.
1068         - added tests for this by groditi
1069         - updated docs to explain this
1070
1071     * metaclass
1072       - load custom metaclasses automatically (thanks groditi)
1073         - added tests for this behavior
1074
1075 0.37 Sat. March 10, 2007
1076     ~~ Many, many documentation updates ~~
1077
1078     * Class::MOP
1079       - added &load_class and &is_class_loaded
1080         - added tests and docs for these
1081
1082     * Class::MOP::Attribute
1083       - default now checks the instance with defined to
1084         avoid setting off bool-overloads (found by Carl Franks)
1085
1086 0.37_002
1087     * /t
1088       - bad name in a test, causing meaningless failuress.
1089         No other changes.
1090
1091 0.37_001
1092
1093     ~~ GLOBAL CHANGES ~~
1094     - All attribute names are now consistent and follow Perl 6
1095       style (prefixed with the sigil, and ! as the twigil for
1096       private attrs). This should not affect any code, unless
1097       you broke encapsulation, in which case, it is your problem
1098       anyway.
1099
1100     !! Class::MOP::Class::Immutable has been removed
1101
1102     * Class::MOP::Method::Constructor
1103       - this has been moved out of Class::MOP::Class::Immutable
1104         and is a proper subclass of Class::MOP::Method now.
1105
1106     * Class::MOP::Class
1107       - this module now uses Class::MOP::Immutable for the
1108         immutable transformation instead of
1109         Class::MOP::Class::Immutable.
1110
1111     + Class::MOP::Immutable
1112       - this module now controls the transformation from a mutable
1113         to an immutable version of the class. Docs for this will
1114         be coming eventually.
1115
1116
1117 0.36 Sun. Nov. 5, 2006
1118     * Class::MOP::Class
1119       - added a few 'no warnings' lines to keep annoying
1120         (and meaningless) warnings from chirping during
1121         global destruction.
1122
1123     * Class::MOP
1124       - some more bootstrapping is now done on the new
1125         classes
1126
1127     * Class::MOP::Class::Immutable
1128       *** API CHANGE ***
1129       - constructor generation is now handled by
1130         the Class::MOP::Method::Constructor class
1131
1132     * Class::MOP::Method::Constructor
1133       - created this to handle constructor generation
1134         in Class::MOP::Class::Immutable
1135
1136     * Class::MOP::Attribute
1137       *** API CHANGE ***
1138       - attributes now delegate to the
1139         Class::MOP::Method::Accessor to generate
1140         accessors
1141
1142     * Class::MOP::Method::Accessor
1143       - all accessor generation functions from
1144         Class::MOP::Attribute have been moved here
1145
1146 0.35 Sat. Sept. 30, 2006
1147
1148     * scripts/class_browser.pl
1149       - initial prototype of a class browser, more
1150         on this to come. Comments and patches are
1151         very much welcome.
1152
1153     * Class::MOP
1154       - All Class::MOP::* accessors are no longer
1155         re-generated in the bootstrap, instead
1156         they are aliased from the originals
1157         - fixed tests to reflect
1158       - added Class::MOP::Method (and its subclasses)
1159         to the bootstrap
1160         - adjusted tests for this
1161       - added the Class::MOP::Instance attributes
1162         to the bootstrap
1163
1164     * Class::MOP::Method
1165       *** API CHANGE ***
1166       - methods are no longer blessed CODE refs
1167         but are actual objects which can be CODE-ified
1168         - adjusted tests to compensate
1169         - adjusted docs for this
1170
1171     * Class::MOP::Class
1172       - changed how methods are dealt with to
1173         encapsulate most of the work into the
1174         &get_method_map method
1175       - made several adjustments for the change
1176         in Class::MOP::Method
1177       - &add_attribute now checks if you are adding
1178         a duplicate name, and properly removes the
1179         old one before installing the new one
1180         - added tests for this
1181         - adjusted docs for this
1182
1183     * Class::MOP::Class::Immutable
1184       - added caching of &get_method_map
1185       - fixed issue with &get_package_symbol
1186       - cleaned up the methods that die (patch by David Wheeler)
1187
1188     * Class::MOP::Package
1189       - added filtering capabilities to
1190         &list_all_package_symbols
1191
1192 0.34 Sat. Aug. 26, 2006
1193     * Class::MOP::Class
1194       - added the %:methods attribute, which like
1195         the $:version and such just actually goes
1196         to the symbol table to get it's stuff.
1197         However, it makes the MOP more complete.
1198      ** API CHANGE **
1199       - The &create method now requires that all
1200         but the package name now is passed in as
1201         named parameters. See docs for more info.
1202         - updated docs and tests for this
1203
1204     * Class::MOP::Object
1205       - added &dump method to easily Data::Dumper
1206         an object
1207
1208     * Class::MOP
1209       - cleaned up the initialization of attributes
1210         which do not store things in the instance
1211       - added the %:methods attribute definition to
1212         the bootstrap
1213
1214     ~ lots of misc. test cleanup
1215
1216 0.33 Sat. Aug. 19, 2006
1217     * Class::MOP::Class
1218       - moved the metaclass cache out of here
1219         and it is now in Class::MOP itself.
1220
1221     * Class::MOP
1222       - moved all the metaclass cache stuff here
1223         - fixed all tests for this
1224
1225     * Class::MOP::Attribute
1226       - reference values (other than CODE refs)
1227         are no longer allowed for defaults
1228         - added tests for this
1229
1230     * Class::MOP::Package
1231       - fixed an issue with perl 5.8.1 and how it deals
1232         with symbol tables. The namespace hash is now
1233         always reloaded from the symbol table.
1234
1235     ~ lots of misc. documentation cleanup
1236
1237 0.32 Sat. Aug. 12, 2006
1238     + added Class::MOP::Object so that the
1239       metamodel is more complete (and closer
1240       to what Perl 6 will probably be).
1241
1242     * Class::MOP::Package
1243       - refactored entire class, this is now
1244         the primary gateway between the metaclass
1245         and the Perl 5 symbol table
1246         - added many tests for this
1247       - this class is now a subclass of
1248         Class::MOP::Object
1249         - added some tests to reflect this
1250
1251     * Class::MOP::Class
1252       - refactored all symbol table access to
1253         use Class::MOP::Package methods instead
1254
1255     * Class::MOP::Module
1256       - adding the $:version attribute in the bootstrap
1257         so that Module has a version as an attribute
1258         - see comment in Class::MOP for details
1259       - added the $:authority attribute to this module
1260         as well as an &identifier method, to bring us
1261         ever closer to Perl 6 goodness
1262         - I have added $AUTHORITY to all the modules
1263         - added tests for this
1264
1265     * Class::MOP::Instance
1266       - added &deinitialize_slot for removing slots
1267         from an instance
1268         - added tests for this
1269
1270     * Class::MOP::Attribute
1271       - added support for &deinitialize_slot for removing
1272         slots from an instance
1273         - added tests for this
1274
1275 0.31 Sat. July 15, 2006
1276
1277     * Class::MOP::Class
1278       - added &find_method_by_name to locate a method
1279         anywhere within the class hierarchy
1280
1281     * Class::MOP::Attribute
1282       - added &set_value and &get_value for getting
1283         the value of the attribute for a particular
1284         instance.
1285
1286 0.30 Wed. July 5, 2006
1287     ---------------------------------------
1288     This is the first version of Class::MOP
1289     to introduce the immutable features which
1290     will be used for optimizating the MOP.
1291     This support should still be considered
1292     experimental, but moving towards stability.
1293     ---------------------------------------
1294
1295     * Created Class::MOP::Class::Immutable
1296
1297     * Created the Class::MOP::Package and
1298       Class::MOP::Module classes to more
1299       closely conform to Perl 6's meta-model
1300
1301     * Class::MOP::Class
1302       - now inherits from Class::MOP::Module
1303       - several methods moved to ::Module and
1304         ::Package and now inherited
1305         - added tests for this
1306
1307     * Class::MOP::Instance
1308       - added an is_inlinable method to allow other
1309         classes to check before they attempt to optimize.
1310       - added an inline_create_instance to inline
1311         instance creation (of course)
1312
1313     ** API CHANGE **
1314       - the Class::MOP::Class::*_package_variable
1315         methods are all now methods of Class::MOP::Package
1316         and called *_package_symbol instead. This is
1317         because they are now more general purpose symbol
1318         table manipulation methods.
1319
1320 0.29_02 Thurs. June 22, 2006
1321     ++ DEVELOPER RELEASE ++
1322     * Class::MOP::Class
1323       - small change in &create so that it behaves
1324         properly when inherited
1325       - small fix to &clone_instance
1326
1327 0.29_01 Fri. May 12, 2006
1328     ++ DEVELOPER RELEASE ++
1329       - This release works in combination with
1330         Moose 0.09_01, it is a developer release
1331         because it introduces a new instance
1332         sub-protocol and has not yet been
1333         optimized.
1334
1335     * Class::MOP::Class
1336       - anon-classes are now properly garbage collected
1337         - added tests for this
1338       - improved method modifier wrapping
1339
1340     * Class::MOP::Instance
1341       - added new instance protocol
1342         - added tests for this
1343       - changed all relevant modules and examples
1344         - Class::MOP::Class
1345         - Class::MOP::Attribute
1346         - examples/*
1347
1348     * metaclass
1349       - you no longer need to specify the metaclass
1350         itself, if it is not there, Class::MOP::Class
1351         is just assumed
1352         - updated tests for this
1353
1354     * examples/
1355       - added ArrayBasedStorage example to show
1356         instance storage using ARRAY refs instead of
1357         HASH refs.
1358         - added tests for this
1359       - InsideOutClass is totally revised using the
1360         new instance protocol
1361         - added more tests for this
1362
1363 0.26 Mon. April 24, 2006
1364     * Class::MOP::Class
1365       - added find_attribute_by_name method
1366         - added tests and docs for this
1367       - some small optimizations
1368
1369     * Class::MOP::Attribute
1370       - some small optimizations
1371
1372 0.25 Thurs. April 20, 2006
1373     * Class::MOP::Class
1374       - added create_anon_class for creating anonymous classes
1375         - added tests for this
1376       - added get_all_metaclasses, get_all_metaclass_names
1377         and get_all_metaclass_instances method to allow
1378         access to all the cached metaclass objects.
1379       - attribute slot initialization is now the responsibility
1380         of the attribute itself, and construct_instance now
1381         delegates appropriately
1382
1383     * Class::MOP::Attribute
1384       - attribute slot initialization is now the responsibility
1385         of the attribute itself, so we added a method for it
1386         called initialize_instance_slot
1387
1388     * examples/
1389       - adjusted all the examples to use the new attribute
1390         initialize_instance_slot method
1391
1392 0.24 Tues. April 11, 2006
1393     * Class::MOP::Class
1394       - cleaned up how the before/after/around method
1395         modifiers get named with Sub::Name
1396
1397 0.23 Thurs. March 30, 2006
1398         * Class::MOP::Class
1399           - fixed the way attribute defaults are handled
1400             during instance construction (bug found by chansen)
1401
1402         * Class::MOP::Attribute
1403           - read-only accessors ('reader') will now die if
1404             passed more than one argument (attempting to write
1405             to them basically)
1406               - added tests for this
1407               - adjusted all /example files to comply
1408
1409 0.22 Mon. March 20, 2006
1410     * Class::MOP::Class
1411       - localized $@ in the *_package_variable functions
1412         because otherwise, it does ugly things in Moose.
1413           - added test case for this
1414
1415 0.21 Wed. March 15, 2006
1416     * Class::MOP::Class
1417       - fixed issue where metaclasses are reaped from
1418         our cache in global destruction, and so are not
1419         available in DESTORY calls
1420
1421 0.20 Thurs. March 2, 2006
1422     - removed the dependency for Clone since
1423       we no longer to deep-cloning by default.
1424
1425     * Class::MOP::Method
1426       - added &package_name, &name and
1427         &fully_qualified_name methods, some of
1428         which were formerly private subs in
1429         Class::MOP::Class
1430
1431     * Class::MOP::Method::Wrapped
1432       - allows for a method to be wrapped with
1433         before, after and around modifiers
1434           - added tests and docs for this feature
1435
1436     * Class::MOP::Class
1437       - improved &get_package_symbol
1438           - &version and &superclasses now use it
1439       - methods are now blessed into Class::MOP::Method
1440         whenever possible
1441       - added methods to install CLOS-style method modifiers
1442          - &add_before_method_modifier
1443          - &add_after_method_modifier
1444          - &add_around_method_modifier
1445              - added tests and docs for these
1446       - added &find_next_method_by_name which finds the
1447         equivalent of SUPER::method_name
1448
1449 0.12 Thurs. Feb 23, 2006
1450     - reduced the dependency on B, no need to always
1451       have the latest
1452
1453     * examples/
1454       - added docs to the C3 method dispatch order test
1455       - fixed missing Algorithm::C3 dependency by making
1456         the test skip if it is not installed
1457
1458 0.11 Mon Feb. 20, 2006
1459     * examples/
1460       - added example of changing method dispatch order to C3
1461
1462     * Class::MOP::Class
1463       - changed how clone_instance behaves, it now only does a
1464         shallow clone (see docs for more details)
1465         - added docs and tests
1466
1467 0.10 Tues Feb. 14, 2006
1468     ** This release was mostly about writing more tests and
1469        cleaning out old and dusty code, the MOP should now
1470        be considered "ready to use".
1471
1472     - adding more tests to get coverage up a little higher,
1473       mostly testing errors and edge cases.
1474       - test coverage is now at 99%
1475
1476     * Class::MOP
1477       - no longer optionally exports to UNIVERSAL::meta or
1478         creates a custom metaclass generator, use the
1479         metaclass pragma instead.
1480
1481     * Class::MOP::Class
1482       - fixed a number of minor issues which came up in the
1483         error/edge-case tests
1484
1485     * Class::MOP::Attribute
1486       - fixed a number of minor issues which came up in the
1487         error/edge-case tests
1488
1489     * examples/
1490       - fixing the AttributesWithHistory example, it was broken.
1491
1492 0.06 Thurs Feb. 9, 2006
1493     * metaclass
1494       - adding new metaclass pragma to make setting up the
1495         metaclass a little more straightforward
1496
1497     * Class::MOP
1498       - clean up bootstrapping to include more complete
1499         attribute definitions for Class::MOP::Class and
1500         Class::MOP::Attribute (accessors, readers, writers,
1501         etc.) ... it is redundant, but is useful meta-info
1502         to have around.
1503
1504     * Class::MOP::Class
1505       - fixing minor meta-circularity issue with &meta, it
1506         is now more useful for subclasses
1507       - added &get_attribute_map as an accessor for the
1508         hash of attribute meta objects
1509       - &compute_all_applicable_attributes now just returns
1510         the attribute meta-object, rather than the HASH ref
1511         since all the same info can be gotten from the
1512         attribute meta-object itself
1513           - updated docs & tests to reflect
1514       - added &clone_instance method which does a deep clone
1515         of the instance structure created by &construct_instance
1516           - added docs & tests for this
1517           - added Clone as a dependency
1518       - added &new_object and &clone_object convience methods to
1519         return blessed new or cloned instances
1520           - they handle Class::MOP::Class singletons correctly too
1521           - added docs & tests for this
1522       - cleaned up the &constuct_class_instance so that it behaves
1523         more like &construct_instance (and managed the singletons too)
1524       - added the &check_metaclass_compatibility method to make sure
1525         that metaclasses are upward and downward compatible.
1526           - added tests and docs for this
1527
1528     * examples/
1529       - adjusting code to use the &Class::MOP::Class::meta
1530         fix detailed above
1531       - adjusting code to use the metaclass pragma
1532
1533 0.05 Sat Feb. 4, 2006
1534     * Class::MOP::Class
1535       - added the &attribute_metaclass and &method_metaclass
1536         attributes which contain a metaclass name to use for
1537         attributes/methods respectively
1538
1539     * Class::MOP
1540       - bootstrap additional attributes for Class::MOP::Class
1541
1542     * examples/
1543       - adjusted the example code and tests to use the new
1544         &attribute_metaclass feature of Class::MOP::Class
1545       - added new example:
1546         - LazyClass
1547
1548 0.04 Fri Feb. 3, 2006
1549     * Class::MOP::Class
1550       - some documentation suggestions from #perl6
1551
1552     * Class::MOP::Attribute
1553       - improved error messages
1554
1555     * examples/
1556       - added new examples:
1557         - AttributesWithHistory
1558         - ClassEncapsultedAttributes
1559
1560 0.03 Fri Feb. 3, 2006
1561     - converted to Module::Build instead of EU::MM
1562
1563     * Class::MOP::Attribute
1564       - refactored method generation code
1565       - attributes are now associated with class directly
1566
1567     * examples/
1568       - refactored the InsideOut example to take advantage
1569         of the Class::MOP::Attribute refactoring
1570       - changed example files to .pod files and hide thier
1571         package names from PAUSE (I don't want to own these
1572         namespaces really, they are just examples)
1573
1574 0.02 Thurs Feb. 2, 2006
1575     - moving examples from t/lib/* to examples/*
1576         - adding POD documentation to the examples
1577
1578 0.01 Thurs Feb. 2, 2006
1579     - Initial release