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