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