1 Revision history for Perl extension Class-MOP.
4 * Class::MOP::Attribute
5 - Allow default values to be Class::MOP::Methods.
7 - Test the above. (Rhesa Rozendaal)
8 - Tweak original commit so the intent matches the accepted behavior
12 - Localize $SIG{__DIE__} inside _try_load_one_class (Sartak)
14 0.84 Tue, May 12, 2009
16 - Depend on Text::Exception 0.27 to avoid failing tests ond old
20 - Made is_class_loaded a little stricter. It was reporting that
21 a class was loaded if it merely had an @ISA variable in its
22 stash. Now it checks that the @ISA var has elements in it.
23 - Deprecate in_global_destruction and subname re-exporting
27 - Explicitly use Devel::GlobalDestruction and Sub::Name
31 - Disable prototype mismatch warnings for add_package_symbol.
34 0.83 Mon, April 27, 2009
36 - Fix segfault when calling get_method_map on a metaclass for an empty
39 0.82_02 Fri, April 24, 2009
40 * Class::MOP::Method::Inlined
41 - Don't inline if the expected method is not defined at all (happens with
42 e.g. Moose::Object::_new is the expected method due to an overridden
45 - Some tests were trying to load Class::MOP::Immutable, which
46 was removed in 0.82_01.
48 0.82_01 Thu, April 23, 2009
49 * Class::MOP::Immutable (and others)
50 - Refactor the immutability system to use a pre-defined class
51 for the immutable metaclass of Class::MOP::Class::Immutable::$class
52 - Rather than generating methods into this class every time, use
53 a Trait (basic mixin) to supply the cached methods
54 - Remove the hack that returns the mutable metaclass for
55 metacircularity in order to provide consistent meta-metaclasses
56 for the Moose compatibility handling code
57 (mst broke it, nothingmuch fixed it)
59 0.82 Mon, April 20, 2009
61 - The deprecation wrappers for some renamed methods were not
62 passing arguments to the new method. (nothingmuch)
64 * Class::MOP::Immutable
65 - Warn during immutablization if the local class provides its own
66 constructor, to parallel the warning in Moose when a superclass
67 provides its own constructor (doy)
69 0.81 Tue, April 7, 2009
72 * Class::MOP::Instance
73 * Class::MOP::Attribute
74 * Class::MOP::Method::Accessor
75 * Class::MOP::Method::Constructor
76 - Include stack traces in the deprecation warnings introduced in
77 0.80_01. (Florian Ragwitz)
80 - Avoid c compiler warnings by declaring some unused function
81 arguments. (Florian Ragwitz)
83 0.80_01 Sun, April 5, 2009
85 - Make sure to preserve any compiler flags already defined in
86 Config.pm. Patch by Vincent Pit. RT #44739.
88 * Many methods have been renamed with a leading underscore, and a
89 few have been deprecated entirely. The methods with a leading
90 underscore are consider "internals only". People writing
91 subclasses or extensions to Class::MOP should feel free to
92 override them, but they are not for "public" use.
95 - construct_class_instance => _construct_class_instance (use new_object)
96 - construct_instance => _construct_instance (use new_object)
97 - check_metaclass_compatibility => _check_metaclass_compatibility
98 - create_meta_instance => _create_meta_instance (use get_meta_instance)
99 - clone_instance => _clone_instance (use clone_object)
100 - compute_all_applicable_methods is deprecated, use get_all_methods
101 - compute_all_applicable_attributes is deprecated, use get_all_attributes
103 - Class::MOP::Instance
104 - bless_instance_structure is deprecated and will be removed
108 - create has been renamed to _instantiate_module. This method
109 does not construct an object, it evals some code that
110 creates the relevant package in Perl's symbol table.
112 - Class::MOP::Method::Accessor
113 - initialize_body => _initialize_body (this is always called
114 when an object is constructed)
115 - /(generate_.*_method(?:_inline)?)/ => '_' . $1
117 - Class::MOP::Method::Constructor
118 - initialize_body => _initialize_body (this is always called
119 when an object is constructed)
120 - /(generate_constructor_method(?:_inline)?)/ => '_' . $1
121 - attributes => _attributes
122 - meta_instance => _meta_instance
124 0.80 Wed, April 1, 2009
126 - Call user_class->meta in fewer places, with the eventual goal
127 of allowing the user to rename or exclude ->meta
128 altogether. Instead uses Class::MOP::class_of. (Sartak)
131 - New class_of function that should be used to retrieve a
132 metaclass. This is unlike get_metaclass_by_name in that it
133 accepts instances, not just class names. (Sartak)
136 - load_first_existing_class didn't actually load the first
137 existing class; instead, it loaded the first existing and
138 compiling class. It now throws an error if a class exists (in
139 @INC) but fails to compile. (hdp)
143 - we had some semi-buggy code that purported to provide a
144 HAS_ISAREV based on whether mro had get_isarev (due to an
145 oversight, it always returned 1). Since mro and MRO::Compat
146 have always had get_isarev, HAS_ISAREV was pointless. This
147 insight simplified the subclasses method by deleting the
148 pure-perl fallback. HAS_ISAREV is now deprecated. (Sartak)
150 0.79 Fri, March 29, 2009
151 * No changes from 0.78_02.
153 0.78_02 Thu, March 26, 2009
155 * Class::MOP::Immutable
156 - A big backwards-incompatible refactoring of the Immutable API,
157 and the make_immutable/make_mutable pieces of the Class
158 API. The core __PACKAGE__->meta->make_immutable API remains
159 the same, however, so this should only affect the most
163 - The XS code used a macro, XSPROTO, that's only in 5.10.x. This
164 has been fixed to be backwards compatible with 5.8.x.
167 - Add a hook for rebless_instance_away (Sartak)
168 - Use blessed instead of ref to get an instance's class name
169 in rebless_instance. (Sartak)
171 0.78_01 Wed, March 18, 2009
173 - Revised and reorganized all of the API documentation. All
174 classes now have (more or less) complete API documentation.
177 * Class::MOP::Instance
178 - Reblessing into a package that supports overloading wasn't
179 properly adding overload magic to the object due to a bug
180 in (at least) 5.8.8. We now use $_[1] directly which seems
181 to set the magic properly. (Sartak)
183 * Class::MOP::Attribute
184 - The process_accessors method is now private. A public alias
185 exists (and will stick around for a few releases), but it
186 warns that calling the public method is deprecated.
188 * Class::MOP::Method::Generated
189 - Removed the new and _new methods, since this is an abstract
190 base class, and all existing subclasses implement their own
194 - Stop is_class_loaded from thinking a class is loaded if it
195 only has an empty GV (Florian Ragwitz).
196 - Add a test for this (Yappo).
197 - Refactor get_all_package_symbols to allow short-circuiting
199 - Use this in is_class_loaded (Florian Ragwitz).
200 - Stop segfaulting when trying to get the name from a sub that's
201 still being compiled (Florian Ragwitz).
202 - Add tests for this (Florian Ragwitz).
203 - Prefix all public symbols with "mop_" (Florian Ragwitz).
204 - Clean up and simplify prehashing of hash keys (Florian Ragwitz).
205 - Simplify creating simple xs reader methods (Florian Ragwitz).
206 - Make everything compile with c++ compilers (Florian Ragwitz).
207 - Upgrade ppport.h from 3.14 to 3.17 (Florian Ragwitz).
210 - Remove optional test plans for tests depending on Sub::Name as
211 we have a hard dependency on Sub::Name anyway (Florian Ragwitz).
214 - Rebuild all c code if mop.h has changed (Florian Ragwitz)
216 0.78 Mon, February 23, 2009
217 * No changes from 0.77_01
219 0.77_01 Sun, February 22, 2009
221 - This package now requires its XS components. Not using
222 Sub::Name lead to different behavior and bugginess in the pure
223 Perl version of the code. A Moose test would fail when run
224 against the pure Perl version of this code.
226 * Class::MOP::Instance
227 - The inline_* methods now quote attribute names themselves, and
228 don't expect to receive a quoted value.
231 0.77 Sat, February 14, 2009
233 - Avoid assertion errors on debugging perls in is_class_loaded
237 - Fixed various corner cases where is_class_loaded incorrectly
238 returned true for a class that wasn't really loaded. (Dave
242 - Add get_all_method_names (Sartak)
243 - Add a wrapped_method_metaclass attribute (Florian Ragwitz)
245 * Class::MOP::Package
246 - Disable deprecated get_all_package_symbols in list
247 context. (Florian Ragwitz)
250 - Make sure we generate a BSD-compatible Makefile (Florian
254 - The misspelled "check_metaclass_compatability" method we've
255 kept around for backwards compat_i_bility will be removed in a
256 near future release. You've been warned.
258 0.76 Thu, January 22, 2009
259 * Class::MOP::Method::Generated
260 - Added new private methods to support code generation, which
261 are being used by Moose and can be used by MooseX
263 - Generated methods are now generated with a #line directive
264 reflecting the source of the generated method. (nothingmuch)
267 - Clarified documentation of methods that return
268 Class::MOP::Method objects. (doy)
271 - Clarified documentation of the metaclass cache methods. (Sartak)
274 - Add test showing how the xs Class::MOP::is_class_loaded can
275 be made to operate differently to the pure perl version (t0m)
277 0.75 Wed, December 31, 2008
279 - A class that was made immutable and then mutable could end up
280 sharing an immutable transformer object
281 (Class::MOP::Immutable) with other classes, leading to all
282 sorts of odd bugs. Reported by t0m. (Dave Rolsky)
284 0.74 Tue, December 25, 2008
286 - Add an xs implementation of Class::MOP::is_class_loaded (closes
287 RT#41862). Based on a patch by Goro Fuji. (Florian Ragwitz)
288 - Changed internals to make prehashing of hash keys easier and less
289 error-prone. (Florian Ragwitz)
291 - Fix documentation to show that around modifiers happen on both
292 sides of the modified method. (Dave Rolsky)
294 0.73 Tue, December 16, 2008
296 - Don't use Perl_mro_meta_init. It's not part of the public perl
297 api. Fixes failures to build on Win32 (RT #41750). (Florian
299 * t/082_get_code_info.t
300 - Add $^P &= ~0x200; (per Ovid's suggestion) in order to not
301 munger anonymous subs when under -d and so making the tests
302 succeed in that case.
304 0.72 Mon, December 8, 2008
305 * Class::MOP::Package
306 - Pass options to _new, so subclass' attributes can be
309 - In the docs, indicate that package_name and name are required
310 when calling ->wrap (Stefan O'Rear)
312 0.71_02 Fri, December 5, 2008
313 * Class::MOP::Immutable
314 - Added a new attribute, inlined_constructor, which is true if
315 the constructor was inlined.
316 * Class::MOP::Package
317 - Make get_all_package_symbols return a hash ref in scalar
318 context and deprecate calling it in list context with a
319 warning. (Florian Ragwitz)
321 - Various improvements and refactoring, making things more robust and
322 easier to maintain. (Florian Ragwitz)
324 0.71_01 Wed, December 3, 2008
326 - Add an "execute" method to invoke the body so
327 we can avoid using the coderef overload (Sartak)
328 * Class::MOP::Immutable
329 - When we memoize methods, get their results lazily
330 to remove some compile-time cost (Sartak)
331 - Small speedup from eliminating several method
334 - Some small internal tweaks to try to reduce the number of
335 times we call get_method_map when bootstrapping the MOP. This
336 might make loading Class::MOP (and Moose) a little
337 faster. (Dave Rolsky)
338 - Implemented an optional XS version of get_method_map. Mostly
339 taken from a patch by Goro Fuji (rt.cpan.org #41080), with
340 help form Florian Ragwitz. (Dave Rolsky)
341 - Make the behaviour of of get_all_package_symbols (and
342 therefore get_method_map) consistent for stub methods. Report
343 and test by Goro Fuji (rt.cpan.org #41255). (Florian Ragwitz)
345 0.71 Wed November 26, 2008
348 - Actual package creation has moved upward from
349 Class to Module so that Moose roles can share
352 0.70_01 Mon, November 19, 2008
354 - Fixes for failures with blead (Florian Ragwitz)
355 - Silenced compiler warnings (Florian Ragwitz)
357 0.70 Fri, November 14, 2008
359 - Fixed an odd corner case where the XS version of
360 get_all_package_symbols could cause a segfault. This only
361 happened with inlined constants in Perl 5.10.0 (Florian
364 0.69 Fri, November 7, 2008
365 * Class::MOP::Method::Wrapped
366 - Added introspection methods for method modifiers (Dave Rolsky)
369 0.68 Fri October 24, 2008
371 - Make load_class require by file name instead of module name.
372 This stops confusing error messages when loading '__PACKAGE__'.
374 - Add load_one_class_of function to enable you to load one of a
375 list of classes, rather than having to call load_class multiple
376 times in an eval. (t0m)
378 0.67 Tue October 14, 2008
380 - Call a method on the class after setting the superclass list
381 so that we can get Perl to detect cycles before MRO::Compat
382 spirals into an infinite loop (sartak)
383 - Reported by Schwern, [rt.cpan.org #39001]
384 - In create(), pass unused options on to initialize()
385 - added test for this
387 0.66 Sat September 20, 2008
388 !! This release has an incompatible change regarding !!
389 introspection of a class's method with Class::MOP::Class !!
392 - We (us maintainers) now run all tests with XS and then without
393 XS, which should help us catch skew between the XS/pure Perl
397 ! The alias_method method has been deprecated. It now simply
398 calls add_method instead. There is no distinction between
399 aliased methods and "real" methods.
401 This means that methods added via alias_method now show up as
402 part of the class's method list/map. This is a backwards
403 incompatible change, but seems unlikely to break any
404 code. Famous last words. (Dave Rolsky)
407 - Fixed the spelling of "compatibility", but we still have a
408 "check_metaclass_compatability" method for backwards
411 0.65 Mon September 1, 2008
412 For those not following the series of dev releases, the changes
413 from 0.64 from 0.65 can mostly be summed up as a lot performance
414 improvements by nothingmuch, including new optional XS versions of
415 some methods. Also, Class::MOP now works _without_ any XS modules,
416 for sad systems without a compiler.
419 - Added name and package_name XS accessors, and make sure all
420 the XS and Perl versions work the same way. (Dave Rolsky)
423 - The XS versions of various methods just returned undef when
424 called class methods, rather than dying like the pure Perl
425 versions. (Dave Rolsky)
427 0.64_07 Fri August 29, 2008
429 - Silenced warnings that managed to break Moose tests when XS
430 was loaded. (Dave Rolsky)
431 - Some XS versions of methods were ignored because of typos in
432 MOP.xs. (Dave Rolsky)
434 0.64_06 Mon August 25, 2008
435 * Class::MOP (MOP.xs)
436 - Another MS VC++ fix, cannot declare a variable in the middle
437 of a scope (Taro Nishino).
439 0.64_05 Sun August 24, 2008
441 - None of the dev releases actually loaded the XS properly, but
442 we silently fell back to the pure Perl version of the
445 * Class::MOP (MOP.xs)
446 - Replaced some code that used functions not available on Visual
447 C++ with some Perl XS API bits (Dave Rolsky).
449 0.64_04 Sat August 23, 2008
451 - Workaround a bug in 5.8.1's goto sub (nothingmuch)
453 * pod.t and pod_coveraget.t
454 - These are no longer shipped with the tarball because of bogus
455 failures from CPAN testers. (Dave Rolsky)
457 0.64_03 Thu August 21, 2008
458 * Class::MOP::Package
459 - Some (legit) code was misparsed by earlier 5.8.x
460 releases. (nothingmuch)
463 - Fix a constant in void context warning (nothingmuch)
465 0.64_02 Thu August 21, 2008
466 * Makefile.PL and Class::MOP
467 - Explicitly require Perl 5.8.0+ (Dave Rolsky)
470 - Add missing prereqs that got lost in the switch away from
473 * Class::MOP::Instance
474 - New method - get_all_attributes (nothingmuch)
476 0.64_01 Wed August 20, 2008
478 - We now check to see if you have a compiler. If you don't, the
479 module installs without some XS bits, but will work the same
480 as with XS. This should make it easier to install on platforms
481 without a compiler (like Windows). (Dave Rolsky)
484 - Perl 6 style attribute naming replaced with sane style ('methods', not
485 '%!methods'). These changes should not impact any existing API uses.
489 - Quite a number of optimizations based on profiling, including
490 allowing constructors to take hash references instead of
491 hashes, duplicating some frequently used code in XS, and
492 making constructors immutable. These changes should not impact
493 any existing API uses. (nothingmuch)
496 - Constructors now respect the meta attributes of their subclasses,
497 facilitating MOP extensibility. More related changes will happen in the
498 next several releases. (nothingmuch)
501 - New method - get_all_methods, replaces the deprecated
502 compute_all_applicable_methods. get_all_attributes provided for
503 consistency (nothingmuch)
504 - New method - wrap_method was refactored out of get_method_map
506 - New API for meta instance invalidation - invalidate_meta_instance,
507 invalidate_meta_instances, add_dependent_meta_instance,
508 remove_dependent_meta_instance, called automatically when attribute
509 definitions change and allows notification of dependent subclasses.
512 0.64 Sun August 3, 2008
513 * Class::MOP::Immutable
514 - fixing subtle edge case in immutable when you
516 - clean up option processing (nothingmuch)
518 * Class::MOP::Instance
519 - inlined initialize slot didn't match
520 non-inlined (nothingmuch)
522 0.63 Mon July 7, 2008
524 - load_class will initialize a metaclass even if
525 the class is already loaded (sartak)
526 - load_class now returns the metaclass instance
527 instead of just 1 (sartak)
530 - better error messages (sartak and Dave Rolsky)
532 0.62 Wed June 18, 2008
533 - in is_class_loaded, recognize scalar references (as opposed to globs) in
534 the symbol table as methods (these are optimized constant subs)
536 0.61 Fri. June 13, 2008
537 - Okay, lets give this another try and see if PAUSE
538 recognizes it correct this time.
540 0.60 Thurs. Jun 12, 2008
541 - Fixed a version number issue by bumping all modules
544 0.59 Thurs. Jun 12, 2008
545 !! Several fixes resulting in yet another 25-30% speedup !!
548 - now stores the instance of the instance
549 metaclass to avoid needless recomputation
550 and deletes it when the cache is blown
551 - introduce methods to query Class::MOP::Class for
552 the options used to make it immutable as well as
553 the proper immutable transformer. (groditi)
555 * Class::MOP::Package
556 - {add, has, get, remove}_package_symbol all
557 now accept a HASH ref argument as well as the
558 string. All internal usages now use the HASH
562 - MOP.xs does sanity checks on the coderef
564 - is_class_loaded check now uses code that
565 was improved in Moose's ClassName type
567 - nonsensical (undef, empty, reference) class
568 names now throw a more direct error in
570 - tests for this and other aspects of
576 Class::MOP::Method::Wrapped
577 Class::MOP::Attribute
578 - switched usage of reftype to ref because
581 0.58 Thurs. May 29, 2008
582 (late night release engineering)--
584 - fixing the version is META.yml, no functional
585 changes in this release
587 0.57 Wed. May 28, 2008
588 !! Several speedups resulting in 20-25% speedups !!
589 || (thanks to konobi, groditi, mst & CataMoose) !!
592 - made get_method_map use list_all_package_symbols
593 instead of manually grabbing each symbol
594 - streamlining &initialize somewhat, since it gets
597 * Class::MOP::Package
598 - made {get, has}_package_symbol not call
600 - inlining a few calls to &name with
601 direct HASH access key access
602 - added get_all_package_symbols to fetch
603 a HASH of items based on a type filter
604 similar to list_all_package_symbols
605 - added tests for this
608 Class::MOP::Method::Constructor
609 Class::MOP::Method::Generated
610 Class::MOP::Method::Accessor
611 - added more descriptive error message to help
612 keep people from wasting time tracking an error
613 that is easily fixed by upgrading.
615 * Class::MOP::Immutable
616 - Don't inline a destructor unless the user actually
618 - added tests for this
620 0.56 Saturday, May 24, 2008
622 - we now get the &check_package_cache_flag
623 function from MRO::Compat
624 - All XS based functionality now has a
625 Pure Perl alternative
626 - the CLASS_MOP_NO_XS environment variable
627 can now be used to force non-XS versions
630 * Class::MOP::Attribute
631 - add has_read_method and has_write_method
632 - get_{read,write}_method_ref now wraps the
633 anon-sub ref in the method metaclass when
635 - added tests for this
637 * Class::MOP::Immutable
638 - added the ability to "wrap" methods when
639 making the class immutable
642 - now handling the edge case of ->meta->identifier
643 dying by wrapping add_package_symbol to specifically
644 allow for it to work.
645 - added tests for this
647 * Class::MOP::Attribute
649 Class::MOP::Immutable
650 - any time a method meta object is constructed
651 we make sure to pass the correct package and
652 method name information
655 Class::MOP::Method::Wrapped
656 Class::MOP::Method::Generated
657 Class::MOP::Method::Accessor
658 Class::MOP::Method::Consructor
659 - the &wrap constructor method now requires that a
660 'package_name' and 'name' attribute are passed. This
661 is to help support the no-XS version, and will
662 throw an error if these are not supplied.
663 - all these classes are now bootstrapped properly
664 and now store the package_name and name attributes
667 ~ Build.PL has been removed since the
668 Module::Install support has been removed
670 0.55 Mon. April 28, 2008
671 - All classes now have proper C3 MRO support
672 - added MRO::Compat as a dependency to allow
673 for the C3 MRO support to Just Work in all
677 - rebless_instance now returns the instance
678 it has just blessed, this is mostly to
680 - set the attr correctly in rebless_instance
681 when it has no init_arg
682 - tweaked &linear_isa and &class_precedence_list
683 to support c3 classes.
685 0.54 Fri. March, 14, 2008
688 - making sure that load_class never gets
689 passed a value from @_ or $_ to squash
690 Ovid's bug (http://use.perl.org/~Ovid/journal/35763)
693 - make_{immutable,mutable} now return 1
695 - improved error handling in ->create method
696 - rebless_instance now takes extra params which
697 will be used to populate values
698 - added tests for this
701 - localizing the Data::Dumper configurations so
702 that it does not pollute others (RT #33509)
708 Class::MOP::Attribute
709 - these classes no longer define their own ->meta,
710 but instead just inherit from Class::MOP::Object
712 * Class::MOP::Instance
713 Class::MOP::Immutable
714 - these classes now inherit from Class::MOP::Object
717 - fixed the filename length on several
718 test files so we install on VMS better
720 - fixed incorrect use of catdir when it
721 should be catfile (RT #32385)
723 0.53 Thurs. Feb. 14, 1008
724 ~~ several doc. fixes and updates ~~
727 Class::MOP::Method::Constructor
728 Class::MOP::Attribute
729 - making init_arg accept an undefined value
730 to indicate that no constructor args can
731 be passed (thanks to nothingmuch)
732 - added tests for this
733 - added attribute initializer attribute (rjbs)
736 - making this use the new init_arg => undef
737 feature instead of the silly hack from
738 before (thanks to nothingmuch)
740 0.52 Tues. Jan. 22, 2008
742 - fixed bug in rebless_instance
745 * Class::MOP::Method::Constructor
746 - removed assumptions about the existence of
749 0.51 Mon. Jan. 14, 2008
750 ~~~ some misc. doc. fixes ~~~
751 ~~ updated copyright dates ~~
754 - now sets the IS_RUNNING_ON_5_10
755 constant so that we can take advantage
756 of some of the nice bits of 5.10
759 - uses the IS_RUNNING_ON_5_10 flag to
760 optimize the &linearized_isa method
761 and avoid the hack/check for circular
762 inheritence in &class_precedence_list
763 - added rebless_instance method (Sartak)
764 - added tests for this
766 * Class::MOP::Immutable
767 - the immutable class now keeps track of
768 the transformer which immutablized it
770 * Class::MOP::Instance
771 - added rebless_instance_structure method (Sartak)
772 - added tests for this
774 0.50 Fri. Dec. 21, 2007
776 - fixed bug in immutable to make sure that
777 transformation arguments are saved
779 - added tests for this
781 * Class::MOP::Immutable
782 - fixed a bug (see above)
784 * Class::MOP::Attribute
787 0.49 Fri. Dec. 14, 2007
788 !! Class::MOP now loads 2 x faster !!
789 !! with XS speedups (thanks konobi) !!
792 - removed the dependency on B
793 - added two XS functions (thanks konobi)
794 - get_code_info($code) which replaces all
795 the B fiddling we were doing with
796 faster/leaner XS level fiddling
797 - check_package_cache_flag($pkg_name) which
798 returns the PL_sub_generation variable to
799 be used to help manage method caching.
802 In 5.10 or greater this will actually
803 use the mro::get_pkg_gen instead to give
804 even more accurate caching information.
805 blblack++ for that stuff :)
808 - added the &subclasses method (thanks rlb)
809 - added the update_package_cache_flag and
810 reset_package_cache_flag which help keep
811 track of when we need to re-fetch the
813 - Several small improvements to take advantage
814 of the new method map caching features
816 0.48 Mon. Nov. 26, 2007
817 * Class::MOP::Attribute
818 - fixed get_read/write_method to handle the
819 HASH ref case, which makes the
820 get_read/write_method_ref handle it too.
821 - added more tests for this
823 0.47 Sat. Nov. 24, 2007
824 * Class::MOP::Attribute
825 - fixed misspelling in get_write_method_ref
826 - added more tests for this
828 0.46 Fri. Nov. 23, 2007
830 - added the linearized_isa method instead of constantly
831 pruning duplicate classes (this will be even more
832 useful in the 5.10-compat version coming soon)
834 * Class::MOP::Attribute
835 - added the get_read_method_ref and get_write_method_ref
836 methods which allow you to retrieve a CODE ref which
837 can always be used to read or write an attribute.
839 0.45 Thurs. Nov. 13, 2007
840 * Class::MOP::Attribute
841 - Fix error message on confess (groditi)
843 0.44 Thurs. Nov. 13, 2007
844 - Apparently I didn't make dist correctly (groditi)
846 0.43 Thurs. Nov. 13, 2007
848 - Add support for the 'builder' attribute (groditi)
851 - optimise metaclass-already-exists check in
852 construct_class_instance (groditi)
853 - duplicate check into initialize to save a
854 call through (groditi)
856 * Class::MOP::Attribute
857 - Add support for the 'builder' attribute (groditi)
858 - Make predicates check for the existence of a value, not whether
859 it is defined (groditi)
861 * Class::MOP::Instance
862 - Make predicates check for the existence of a value, not whether
863 it is defined (groditi)
865 * Class::MOP::Method::Accessor
866 - made this a subclass of Class::MOP::Method::Generated
867 - removed the relevant attributes
869 * Class::MOP::Method::Constructor
870 - fixed the cached values we had to be more sane
871 - made this a subclass of Class::MOP::Method::Generated
872 - fixed generated constructor so it properly handles
874 - added tests for this
875 - added the option to allow for both inlined and
876 non-inlined constructors.
877 - Update inlined methods for builder and predicate changes (groditi)
879 * Class::MOP::Method::Generated
880 - added this class as an abstract base for the
881 Class::MOP::Method::{Constructor,Accessor} classes
882 - added tests for this
885 - Alter tests (005, 014 020, 021) for new builder addition (groditi)
886 - Tests for new predicate behavior (and corrections to old tests) (groditi)
889 - Update ArrayRef based class example to work with predicate changes
891 0.42 Mon. July 16, 2007
892 !!! Horray for mst, he fixed it !!!
894 * Class::MOP::Package
895 - alter symbol table handling to deal with 5.8.x and 5.9.x
898 - Get rid of the crappy workaround from 0.40/41
900 0.41 Sun. July 15, 2007
902 Arghh!!! My TODO test didn't work, so I handle
903 it manually now so that people can use this
904 with 5.9.5/bleadperl without issue.
906 0.40 Tues, July 3, 2007
908 ~ marked a test in 003_methods.t as TODO
909 for perl 5.9.5 (this test is irrelvant to
910 the module functioning on 5.9.5 for the most
913 0.39 Mon. June 18, 2007
914 * Class::MOP::Immutable
915 - added make_metaclass_mutable + docs (groditi)
916 - removed unused variable
917 - added create_immutable_transformer
918 necessary for sane overloading of immutable behavior
919 - tests for this (groditi)
922 - Immutability can now be undone,
923 added make_mutable + tests + docs (groditi)
924 - Massive changes to the way Immutable is done
925 for details see comments next to make_immutable
926 This fixes a bug where custom metaclasses broke
927 when made immutable. We are now keeping one immutable
928 metaclass instance per metaclass instead of just one
929 to prevent isa hierarchy corruption. Memory use will go
930 up, but I suspect it will be neglible.
931 - New tests added for this behavior. (groditi)
933 0.38 Thurs. May 31, 2007
934 ~~ More documentation updates ~~
936 * Class::MOP::Package
937 - we now deal with stub methods properly
938 - added tests for this
939 - fixed some tests failing on 5.9.5 (thanks blblack)
941 * Class::MOP::Attribute
942 - added get_read_method and get_write_method
943 thanks to groditi for this code, tests
945 - added tests and POD for this
948 - fixed RT issue #27329, clone object now
949 handles undef values correctly.
950 - added tests for this
951 - Corrected anon-class handling so that they
952 will not get reaped when instances still
953 exist which need to reference them. This is
954 the correct behavior, hopefully this is an
955 obscure enough feature that there are not too
956 many work arounds out in the wild.
957 - added tests for this by groditi
958 - updated docs to explain this
961 - load custom metaclasses automatically (thanks groditi)
962 - added tests for this behavior
964 0.37 Sat. March 10, 2007
965 ~~ Many, many documentation updates ~~
968 - added &load_class and &is_class_loaded
969 - added tests and docs for these
971 * Class::MOP::Attribute
972 - default now checks the instance with defined to
973 avoid setting off bool-overloads (found by Carl Franks)
977 - bad name in a test, causing meaningless failuress.
983 - All attribute names are now consistent and follow Perl 6
984 style (prefixed with the sigil, and ! as the twigil for
985 private attrs). This should not affect any code, unless
986 you broke encapsulation, in which case, it is your problem
989 !! Class::MOP::Class::Immutable has been removed
991 * Class::MOP::Method::Constructor
992 - this has been moved out of Class::MOP::Class::Immutable
993 and is a proper subclass of Class::MOP::Method now.
996 - this module now uses Class::MOP::Immutable for the
997 immutable transformation instead of
998 Class::MOP::Class::Immutable.
1000 + Class::MOP::Immutable
1001 - this module now controls the transformation from a mutable
1002 to an immutable version of the class. Docs for this will
1003 be coming eventually.
1006 0.36 Sun. Nov. 5, 2006
1008 - added a few 'no warnings' lines to keep annoying
1009 (and meaningless) warnings from chirping during
1013 - some more bootstrapping is now done on the new
1016 * Class::MOP::Class::Immutable
1018 - constructor generation is now handled by
1019 the Class::MOP::Method::Constructor class
1021 * Class::MOP::Method::Constructor
1022 - created this to handle constructor generation
1023 in Class::MOP::Class::Immutable
1025 * Class::MOP::Attribute
1027 - attributes now delegate to the
1028 Class::MOP::Method::Accessor to generate
1031 * Class::MOP::Method::Accessor
1032 - all accessor generation functions from
1033 Class::MOP::Attribute have been moved here
1035 0.35 Sat. Sept. 30, 2006
1037 * scripts/class_browser.pl
1038 - initial prototype of a class browser, more
1039 on this to come. Comments and patches are
1043 - All Class::MOP::* accessors are no longer
1044 re-generated in the bootstrap, instead
1045 they are aliased from the originals
1046 - fixed tests to reflect
1047 - added Class::MOP::Method (and its subclasses)
1049 - adjusted tests for this
1050 - added the Class::MOP::Instance attributes
1053 * Class::MOP::Method
1055 - methods are no longer blessed CODE refs
1056 but are actual objects which can be CODE-ified
1057 - adjusted tests to compensate
1058 - adjusted docs for this
1061 - changed how methods are dealt with to
1062 encapsulate most of the work into the
1063 &get_method_map method
1064 - made several adjustments for the change
1065 in Class::MOP::Method
1066 - &add_attribute now checks if you are adding
1067 a duplicate name, and properly removes the
1068 old one before installing the new one
1069 - added tests for this
1070 - adjusted docs for this
1072 * Class::MOP::Class::Immutable
1073 - added caching of &get_method_map
1074 - fixed issue with &get_package_symbol
1075 - cleaned up the methods that die (patch by David Wheeler)
1077 * Class::MOP::Package
1078 - added filtering capabilities to
1079 &list_all_package_symbols
1081 0.34 Sat. Aug. 26, 2006
1083 - added the %:methods attribute, which like
1084 the $:version and such just actually goes
1085 to the symbol table to get it's stuff.
1086 However, it makes the MOP more complete.
1088 - The &create method now requires that all
1089 but the package name now is passed in as
1090 named parameters. See docs for more info.
1091 - updated docs and tests for this
1093 * Class::MOP::Object
1094 - added &dump method to easily Data::Dumper
1098 - cleaned up the initialization of attributes
1099 which do not store things in the instance
1100 - added the %:methods attribute definition to
1103 ~ lots of misc. test cleanup
1105 0.33 Sat. Aug. 19, 2006
1107 - moved the metaclass cache out of here
1108 and it is now in Class::MOP itself.
1111 - moved all the metaclass cache stuff here
1112 - fixed all tests for this
1114 * Class::MOP::Attribute
1115 - reference values (other than CODE refs)
1116 are no longer allowed for defaults
1117 - added tests for this
1119 * Class::MOP::Package
1120 - fixed an issue with perl 5.8.1 and how it deals
1121 with symbol tables. The namespace hash is now
1122 always reloaded from the symbol table.
1124 ~ lots of misc. documentation cleanup
1126 0.32 Sat. Aug. 12, 2006
1127 + added Class::MOP::Object so that the
1128 metamodel is more complete (and closer
1129 to what Perl 6 will probably be).
1131 * Class::MOP::Package
1132 - refactored entire class, this is now
1133 the primary gateway between the metaclass
1134 and the Perl 5 symbol table
1135 - added many tests for this
1136 - this class is now a subclass of
1138 - added some tests to reflect this
1141 - refactored all symbol table access to
1142 use Class::MOP::Package methods instead
1144 * Class::MOP::Module
1145 - adding the $:version attribute in the bootstrap
1146 so that Module has a version as an attribute
1147 - see comment in Class::MOP for details
1148 - added the $:authority attribute to this module
1149 as well as an &identifier method, to bring us
1150 ever closer to Perl 6 goodness
1151 - I have added $AUTHORITY to all the modules
1152 - added tests for this
1154 * Class::MOP::Instance
1155 - added &deinitialize_slot for removing slots
1157 - added tests for this
1159 * Class::MOP::Attribute
1160 - added support for &deinitialize_slot for removing
1161 slots from an instance
1162 - added tests for this
1164 0.31 Sat. July 15, 2006
1167 - added &find_method_by_name to locate a method
1168 anywhere within the class hierarchy
1170 * Class::MOP::Attribute
1171 - added &set_value and &get_value for getting
1172 the value of the attribute for a particular
1175 0.30 Wed. July 5, 2006
1176 ---------------------------------------
1177 This is the first version of Class::MOP
1178 to introduce the immutable features which
1179 will be used for optimizating the MOP.
1180 This support should still be considered
1181 experimental, but moving towards stability.
1182 ---------------------------------------
1184 * Created Class::MOP::Class::Immutable
1186 * Created the Class::MOP::Package and
1187 Class::MOP::Module classes to more
1188 closely conform to Perl 6's meta-model
1191 - now inherits from Class::MOP::Module
1192 - several methods moved to ::Module and
1193 ::Package and now inherited
1194 - added tests for this
1196 * Class::MOP::Instance
1197 - added an is_inlinable method to allow other
1198 classes to check before they attempt to optimize.
1199 - added an inline_create_instance to inline
1200 instance creation (of course)
1203 - the Class::MOP::Class::*_package_variable
1204 methods are all now methods of Class::MOP::Package
1205 and called *_package_symbol instead. This is
1206 because they are now more general purpose symbol
1207 table manipulation methods.
1209 0.29_02 Thurs. June 22, 2006
1210 ++ DEVELOPER RELEASE ++
1212 - small change in &create so that it behaves
1213 properly when inherited
1214 - small fix to &clone_instance
1216 0.29_01 Fri. May 12, 2006
1217 ++ DEVELOPER RELEASE ++
1218 - This release works in combination with
1219 Moose 0.09_01, it is a developer release
1220 because it introduces a new instance
1221 sub-protocol and has not yet been
1225 - anon-classes are now properly garbage collected
1226 - added tests for this
1227 - improved method modifier wrapping
1229 * Class::MOP::Instance
1230 - added new instance protocol
1231 - added tests for this
1232 - changed all relevant modules and examples
1234 - Class::MOP::Attribute
1238 - you no longer need to specify the metaclass
1239 itself, if it is not there, Class::MOP::Class
1241 - updated tests for this
1244 - added ArrayBasedStorage example to show
1245 instance storage using ARRAY refs instead of
1247 - added tests for this
1248 - InsideOutClass is totally revised using the
1249 new instance protocol
1250 - added more tests for this
1252 0.26 Mon. April 24, 2006
1254 - added find_attribute_by_name method
1255 - added tests and docs for this
1256 - some small optimizations
1258 * Class::MOP::Attribute
1259 - some small optimizations
1261 0.25 Thurs. April 20, 2006
1263 - added create_anon_class for creating anonymous classes
1264 - added tests for this
1265 - added get_all_metaclasses, get_all_metaclass_names
1266 and get_all_metaclass_instances method to allow
1267 access to all the cached metaclass objects.
1268 - attribute slot initialization is now the responsibility
1269 of the attribute itself, and construct_instance now
1270 delegates appropriately
1272 * Class::MOP::Attribute
1273 - attribute slot initialization is now the responsibility
1274 of the attribute itself, so we added a method for it
1275 called initialize_instance_slot
1278 - adjusted all the examples to use the new attribute
1279 initialize_instance_slot method
1281 0.24 Tues. April 11, 2006
1283 - cleaned up how the before/after/around method
1284 modifiers get named with Sub::Name
1286 0.23 Thurs. March 30, 2006
1288 - fixed the way attribute defaults are handled
1289 during instance construction (bug found by chansen)
1291 * Class::MOP::Attribute
1292 - read-only accessors ('reader') will now die if
1293 passed more than one argument (attempting to write
1295 - added tests for this
1296 - adjusted all /example files to comply
1298 0.22 Mon. March 20, 2006
1300 - localized $@ in the *_package_variable functions
1301 because otherwise, it does ugly things in Moose.
1302 - added test case for this
1304 0.21 Wed. March 15, 2006
1306 - fixed issue where metaclasses are reaped from
1307 our cache in global destruction, and so are not
1308 available in DESTORY calls
1310 0.20 Thurs. March 2, 2006
1311 - removed the dependency for Clone since
1312 we no longer to deep-cloning by default.
1314 * Class::MOP::Method
1315 - added &package_name, &name and
1316 &fully_qualified_name methods, some of
1317 which were formerly private subs in
1320 * Class::MOP::Method::Wrapped
1321 - allows for a method to be wrapped with
1322 before, after and around modifiers
1323 - added tests and docs for this feature
1326 - improved &get_package_symbol
1327 - &version and &superclasses now use it
1328 - methods are now blessed into Class::MOP::Method
1330 - added methods to install CLOS-style method modifiers
1331 - &add_before_method_modifier
1332 - &add_after_method_modifier
1333 - &add_around_method_modifier
1334 - added tests and docs for these
1335 - added &find_next_method_by_name which finds the
1336 equivalent of SUPER::method_name
1338 0.12 Thurs. Feb 23, 2006
1339 - reduced the dependency on B, no need to always
1343 - added docs to the C3 method dispatch order test
1344 - fixed missing Algorithm::C3 dependency by making
1345 the test skip if it is not installed
1347 0.11 Mon Feb. 20, 2006
1349 - added example of changing method dispatch order to C3
1352 - changed how clone_instance behaves, it now only does a
1353 shallow clone (see docs for more details)
1354 - added docs and tests
1356 0.10 Tues Feb. 14, 2006
1357 ** This release was mostly about writing more tests and
1358 cleaning out old and dusty code, the MOP should now
1359 be considered "ready to use".
1361 - adding more tests to get coverage up a little higher,
1362 mostly testing errors and edge cases.
1363 - test coverage is now at 99%
1366 - no longer optionally exports to UNIVERSAL::meta or
1367 creates a custom metaclass generator, use the
1368 metaclass pragma instead.
1371 - fixed a number of minor issues which came up in the
1372 error/edge-case tests
1374 * Class::MOP::Attribute
1375 - fixed a number of minor issues which came up in the
1376 error/edge-case tests
1379 - fixing the AttributesWithHistory example, it was broken.
1381 0.06 Thurs Feb. 9, 2006
1383 - adding new metaclass pragma to make setting up the
1384 metaclass a little more straightforward
1387 - clean up bootstrapping to include more complete
1388 attribute definitions for Class::MOP::Class and
1389 Class::MOP::Attribute (accessors, readers, writers,
1390 etc.) ... it is redundant, but is useful meta-info
1394 - fixing minor meta-circularity issue with &meta, it
1395 is now more useful for subclasses
1396 - added &get_attribute_map as an accessor for the
1397 hash of attribute meta objects
1398 - &compute_all_applicable_attributes now just returns
1399 the attribute meta-object, rather than the HASH ref
1400 since all the same info can be gotten from the
1401 attribute meta-object itself
1402 - updated docs & tests to reflect
1403 - added &clone_instance method which does a deep clone
1404 of the instance structure created by &construct_instance
1405 - added docs & tests for this
1406 - added Clone as a dependency
1407 - added &new_object and &clone_object convience methods to
1408 return blessed new or cloned instances
1409 - they handle Class::MOP::Class singletons correctly too
1410 - added docs & tests for this
1411 - cleaned up the &constuct_class_instance so that it behaves
1412 more like &construct_instance (and managed the singletons too)
1413 - added the &check_metaclass_compatibility method to make sure
1414 that metaclasses are upward and downward compatible.
1415 - added tests and docs for this
1418 - adjusting code to use the &Class::MOP::Class::meta
1420 - adjusting code to use the metaclass pragma
1422 0.05 Sat Feb. 4, 2006
1424 - added the &attribute_metaclass and &method_metaclass
1425 attributes which contain a metaclass name to use for
1426 attributes/methods respectively
1429 - bootstrap additional attributes for Class::MOP::Class
1432 - adjusted the example code and tests to use the new
1433 &attribute_metaclass feature of Class::MOP::Class
1434 - added new example:
1437 0.04 Fri Feb. 3, 2006
1439 - some documentation suggestions from #perl6
1441 * Class::MOP::Attribute
1442 - improved error messages
1445 - added new examples:
1446 - AttributesWithHistory
1447 - ClassEncapsultedAttributes
1449 0.03 Fri Feb. 3, 2006
1450 - converted to Module::Build instead of EU::MM
1452 * Class::MOP::Attribute
1453 - refactored method generation code
1454 - attributes are now associated with class directly
1457 - refactored the InsideOut example to take advantage
1458 of the Class::MOP::Attribute refactoring
1459 - changed example files to .pod files and hide thier
1460 package names from PAUSE (I don't want to own these
1461 namespaces really, they are just examples)
1463 0.02 Thurs Feb. 2, 2006
1464 - moving examples from t/lib/* to examples/*
1465 - adding POD documentation to the examples
1467 0.01 Thurs Feb. 2, 2006