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