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