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