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