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