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