1 Revision history for Perl extension Class-MOP.
5 0.60 Thurs. Jun 12, 2008
6 - Fixed a version number issue by bumping all modules
9 0.59 Thurs. Jun 12, 2008
10 !! Several fixes resulting in yet another 25-30% speedup !!
13 - now stores the instance of the instance
14 metaclass to avoid needless recomputation
15 and deletes it when the cache is blown
16 - introduce methods to query Class::MOP::Class for
17 the options used to make it immutable as well as
18 the proper immutable transformer. (groditi)
21 - {add, has, get, remove}_package_symbol all
22 now accept a HASH ref argument as well as the
23 string. All internal usages now use the HASH
27 - MOP.xs does sanity checks on the coderef
29 - is_class_loaded check now uses code that
30 was improved in Moose's ClassName type
32 - nonsensical (undef, empty, reference) class
33 names now throw a more direct error in
35 - tests for this and other aspects of
41 Class::MOP::Method::Wrapped
43 - switched usage of reftype to ref because
46 0.58 Thurs. May 29, 2008
47 (late night release engineering)--
49 - fixing the version is META.yml, no functional
50 changes in this release
52 0.57 Wed. May 28, 2008
53 !! Several speedups resulting in 20-25% speedups !!
54 || (thanks to konobi, groditi, mst & CataMoose) !!
57 - made get_method_map use list_all_package_symbols
58 instead of manually grabbing each symbol
59 - streamlining &initialize somewhat, since it gets
63 - made {get, has}_package_symbol not call
65 - inlining a few calls to &name with
66 direct HASH access key access
67 - added get_all_package_symbols to fetch
68 a HASH of items based on a type filter
69 similar to list_all_package_symbols
70 - added tests for this
73 Class::MOP::Method::Constructor
74 Class::MOP::Method::Generated
75 Class::MOP::Method::Accessor
76 - added more descriptive error message to help
77 keep people from wasting time tracking an error
78 that is easily fixed by upgrading.
80 * Class::MOP::Immutable
81 - Don't inline a destructor unless the user actually
83 - added tests for this
85 0.56 Saturday, May 24, 2008
87 - we now get the &check_package_cache_flag
88 function from MRO::Compat
89 - All XS based functionality now has a
91 - the CLASS_MOP_NO_XS environment variable
92 can now be used to force non-XS versions
95 * Class::MOP::Attribute
96 - add has_read_method and has_write_method
97 - get_{read,write}_method_ref now wraps the
98 anon-sub ref in the method metaclass when
100 - added tests for this
102 * Class::MOP::Immutable
103 - added the ability to "wrap" methods when
104 making the class immutable
107 - now handling the edge case of ->meta->identifier
108 dying by wrapping add_package_symbol to specifically
109 allow for it to work.
110 - added tests for this
112 * Class::MOP::Attribute
114 Class::MOP::Immutable
115 - any time a method meta object is constructed
116 we make sure to pass the correct package and
117 method name information
120 Class::MOP::Method::Wrapped
121 Class::MOP::Method::Generated
122 Class::MOP::Method::Accessor
123 Class::MOP::Method::Consructor
124 - the &wrap constructor method now requires that a
125 'package_name' and 'name' attribute are passed. This
126 is to help support the no-XS version, and will
127 throw an error if these are not supplied.
128 - all these classes are now bootstrapped properly
129 and now store the package_name and name attributes
132 ~ Build.PL has been removed since the
133 Module::Install support has been removed
135 0.55 Mon. April 28, 2008
136 - All classes now have proper C3 MRO support
137 - added MRO::Compat as a dependency to allow
138 for the C3 MRO support to Just Work in all
142 - rebless_instance now returns the instance
143 it has just blessed, this is mostly to
145 - set the attr correctly in rebless_instance
146 when it has no init_arg
147 - tweaked &linear_isa and &class_precedence_list
148 to support c3 classes.
150 0.54 Fri. March, 14, 2008
153 - making sure that load_class never gets
154 passed a value from @_ or $_ to squash
155 Ovid's bug (http://use.perl.org/~Ovid/journal/35763)
158 - make_{immutable,mutable} now return 1
160 - improved error handling in ->create method
161 - rebless_instance now takes extra params which
162 will be used to populate values
163 - added tests for this
166 - localizing the Data::Dumper configurations so
167 that it does not pollute others (RT #33509)
173 Class::MOP::Attribute
174 - these classes no longer define their own ->meta,
175 but instead just inherit from Class::MOP::Object
177 * Class::MOP::Instance
178 Class::MOP::Immutable
179 - these classes now inherit from Class::MOP::Object
182 - fixed the filename length on several
183 test files so we install on VMS better
185 - fixed incorrect use of catdir when it
186 should be catfile (RT #32385)
188 0.53 Thurs. Feb. 14, 1008
189 ~~ several doc. fixes and updates ~~
192 Class::MOP::Method::Constructor
193 Class::MOP::Attribute
194 - making init_arg accept an undefined value
195 to indicate that no constructor args can
196 be passed (thanks to nothingmuch)
197 - added tests for this
198 - added attribute initializer attribute (rjbs)
201 - making this use the new init_arg => undef
202 feature instead of the silly hack from
203 before (thanks to nothingmuch)
205 0.52 Tues. Jan. 22, 2008
207 - fixed bug in rebless_instance
210 * Class::MOP::Method::Constructor
211 - removed assumptions about the existence of
214 0.51 Mon. Jan. 14, 2008
215 ~~~ some misc. doc. fixes ~~~
216 ~~ updated copyright dates ~~
219 - now sets the IS_RUNNING_ON_5_10
220 constant so that we can take advantage
221 of some of the nice bits of 5.10
224 - uses the IS_RUNNING_ON_5_10 flag to
225 optimize the &linearized_isa method
226 and avoid the hack/check for circular
227 inheritence in &class_precedence_list
228 - added rebless_instance method (Sartak)
229 - added tests for this
231 * Class::MOP::Immutable
232 - the immutable class now keeps track of
233 the transformer which immutablized it
235 * Class::MOP::Instance
236 - added rebless_instance_structure method (Sartak)
237 - added tests for this
239 0.50 Fri. Dec. 21, 2007
241 - fixed bug in immutable to make sure that
242 transformation arguments are saved
244 - added tests for this
246 * Class::MOP::Immutable
247 - fixed a bug (see above)
249 * Class::MOP::Attribute
252 0.49 Fri. Dec. 14, 2007
253 !! Class::MOP now loads 2 x faster !!
254 !! with XS speedups (thanks konobi) !!
257 - removed the dependency on B
258 - added two XS functions (thanks konobi)
259 - get_code_info($code) which replaces all
260 the B fiddling we were doing with
261 faster/leaner XS level fiddling
262 - check_package_cache_flag($pkg_name) which
263 returns the PL_sub_generation variable to
264 be used to help manage method caching.
267 In 5.10 or greater this will actually
268 use the mro::get_pkg_gen instead to give
269 even more accurate caching information.
270 blblack++ for that stuff :)
273 - added the &subclasses method (thanks rlb)
274 - added the update_package_cache_flag and
275 reset_package_cache_flag which help keep
276 track of when we need to re-fetch the
278 - Several small improvements to take advantage
279 of the new method map caching features
281 0.48 Mon. Nov. 26, 2007
282 * Class::MOP::Attribute
283 - fixed get_read/write_method to handle the
284 HASH ref case, which makes the
285 get_read/write_method_ref handle it too.
286 - added more tests for this
288 0.47 Sat. Nov. 24, 2007
289 * Class::MOP::Attribute
290 - fixed misspelling in get_write_method_ref
291 - added more tests for this
293 0.46 Fri. Nov. 23, 2007
295 - added the linearized_isa method instead of constantly
296 pruning duplicate classes (this will be even more
297 useful in the 5.10-compat version coming soon)
299 * Class::MOP::Attribute
300 - added the get_read_method_ref and get_write_method_ref
301 methods which allow you to retrieve a CODE ref which
302 can always be used to read or write an attribute.
304 0.45 Thurs. Nov. 13, 2007
305 * Class::MOP::Attribute
306 - Fix error message on confess (groditi)
308 0.44 Thurs. Nov. 13, 2007
309 - Apparently I didn't make dist correctly (groditi)
311 0.43 Thurs. Nov. 13, 2007
313 - Add support for the 'builder' attribute (groditi)
316 - optimise metaclass-already-exists check in
317 construct_class_instance (groditi)
318 - duplicate check into initialize to save a
319 call through (groditi)
321 * Class::MOP::Attribute
322 - Add support for the 'builder' attribute (groditi)
323 - Make predicates check for the existence of a value, not whether
324 it is defined (groditi)
326 * Class::MOP::Instance
327 - Make predicates check for the existence of a value, not whether
328 it is defined (groditi)
330 * Class::MOP::Method::Accessor
331 - made this a subclass of Class::MOP::Method::Generated
332 - removed the relevant attributes
334 * Class::MOP::Method::Constructor
335 - fixed the cached values we had to be more sane
336 - made this a subclass of Class::MOP::Method::Generated
337 - fixed generated constructor so it properly handles
339 - added tests for this
340 - added the option to allow for both inlined and
341 non-inlined constructors.
342 - Update inlined methods for builder and predicate changes (groditi)
344 * Class::MOP::Method::Generated
345 - added this class as an abstract base for the
346 Class::MOP::Method::{Constructor,Accessor} classes
347 - added tests for this
350 - Alter tests (005, 014 020, 021) for new builder addition (groditi)
351 - Tests for new predicate behavior (and corrections to old tests) (groditi)
354 - Update ArrayRef based class example to work with predicate changes
356 0.42 Mon. July 16, 2007
357 !!! Horray for mst, he fixed it !!!
359 * Class::MOP::Package
360 - alter symbol table handling to deal with 5.8.x and 5.9.x
363 - Get rid of the crappy workaround from 0.40/41
365 0.41 Sun. July 15, 2007
367 Arghh!!! My TODO test didn't work, so I handle
368 it manually now so that people can use this
369 with 5.9.5/bleadperl without issue.
371 0.40 Tues, July 3, 2007
373 ~ marked a test in 003_methods.t as TODO
374 for perl 5.9.5 (this test is irrelvant to
375 the module functioning on 5.9.5 for the most
378 0.39 Mon. June 18, 2007
379 * Class::MOP::Immutable
380 - added make_metaclass_mutable + docs (groditi)
381 - removed unused variable
382 - added create_immutable_transformer
383 necessary for sane overloading of immutable behavior
384 - tests for this (groditi)
387 - Immutability can now be undone,
388 added make_mutable + tests + docs (groditi)
389 - Massive changes to the way Immutable is done
390 for details see comments next to make_immutable
391 This fixes a bug where custom metaclasses broke
392 when made immutable. We are now keeping one immutable
393 metaclass instance per metaclass instead of just one
394 to prevent isa hierarchy corruption. Memory use will go
395 up, but I suspect it will be neglible.
396 - New tests added for this behavior. (groditi)
398 0.38 Thurs. May 31, 2007
399 ~~ More documentation updates ~~
401 * Class::MOP::Package
402 - we now deal with stub methods properly
403 - added tests for this
404 - fixed some tests failing on 5.9.5 (thanks blblack)
406 * Class::MOP::Attribute
407 - added get_read_method and get_write_method
408 thanks to groditi for this code, tests
410 - added tests and POD for this
413 - fixed RT issue #27329, clone object now
414 handles undef values correctly.
415 - added tests for this
416 - Corrected anon-class handling so that they
417 will not get reaped when instances still
418 exist which need to reference them. This is
419 the correct behavior, hopefully this is an
420 obscure enough feature that there are not too
421 many work arounds out in the wild.
422 - added tests for this by groditi
423 - updated docs to explain this
426 - load custom metaclasses automatically (thanks groditi)
427 - added tests for this behavior
429 0.37 Sat. March 10, 2007
430 ~~ Many, many documentation updates ~~
433 - added &load_class and &is_class_loaded
434 - added tests and docs for these
436 * Class::MOP::Attribute
437 - default now checks the instance with defined to
438 avoid setting off bool-overloads (found by Carl Franks)
442 - bad name in a test, causing meaningless failuress.
448 - All attribute names are now consistent and follow Perl 6
449 style (prefixed with the sigil, and ! as the twigil for
450 private attrs). This should not affect any code, unless
451 you broke encapsulation, in which case, it is your problem
454 !! Class::MOP::Class::Immutable has been removed
456 * Class::MOP::Method::Constructor
457 - this has been moved out of Class::MOP::Class::Immutable
458 and is a proper subclass of Class::MOP::Method now.
461 - this module now uses Class::MOP::Immutable for the
462 immutable transformation instead of
463 Class::MOP::Class::Immutable.
465 + Class::MOP::Immutable
466 - this module now controls the transformation from a mutable
467 to an immutable version of the class. Docs for this will
468 be coming eventually.
471 0.36 Sun. Nov. 5, 2006
473 - added a few 'no warnings' lines to keep annoying
474 (and meaningless) warnings from chirping during
478 - some more bootstrapping is now done on the new
481 * Class::MOP::Class::Immutable
483 - constructor generation is now handled by
484 the Class::MOP::Method::Constructor class
486 * Class::MOP::Method::Constructor
487 - created this to handle constructor generation
488 in Class::MOP::Class::Immutable
490 * Class::MOP::Attribute
492 - attributes now delegate to the
493 Class::MOP::Method::Accessor to generate
496 * Class::MOP::Method::Accessor
497 - all accessor generation functions from
498 Class::MOP::Attribute have been moved here
500 0.35 Sat. Sept. 30, 2006
502 * scripts/class_browser.pl
503 - initial prototype of a class browser, more
504 on this to come. Comments and patches are
508 - All Class::MOP::* accessors are no longer
509 re-generated in the bootstrap, instead
510 they are aliased from the originals
511 - fixed tests to reflect
512 - added Class::MOP::Method (and its subclasses)
514 - adjusted tests for this
515 - added the Class::MOP::Instance attributes
520 - methods are no longer blessed CODE refs
521 but are actual objects which can be CODE-ified
522 - adjusted tests to compensate
523 - adjusted docs for this
526 - changed how methods are dealt with to
527 encapsulate most of the work into the
528 &get_method_map method
529 - made several adjustments for the change
530 in Class::MOP::Method
531 - &add_attribute now checks if you are adding
532 a duplicate name, and properly removes the
533 old one before installing the new one
534 - added tests for this
535 - adjusted docs for this
537 * Class::MOP::Class::Immutable
538 - added caching of &get_method_map
539 - fixed issue with &get_package_symbol
540 - cleaned up the methods that die (patch by David Wheeler)
542 * Class::MOP::Package
543 - added filtering capabilities to
544 &list_all_package_symbols
546 0.34 Sat. Aug. 26, 2006
548 - added the %:methods attribute, which like
549 the $:version and such just actually goes
550 to the symbol table to get it's stuff.
551 However, it makes the MOP more complete.
553 - The &create method now requires that all
554 but the package name now is passed in as
555 named parameters. See docs for more info.
556 - updated docs and tests for this
559 - added &dump method to easily Data::Dumper
563 - cleaned up the initialization of attributes
564 which do not store things in the instance
565 - added the %:methods attribute definition to
568 ~ lots of misc. test cleanup
570 0.33 Sat. Aug. 19, 2006
572 - moved the metaclass cache out of here
573 and it is now in Class::MOP itself.
576 - moved all the metaclass cache stuff here
577 - fixed all tests for this
579 * Class::MOP::Attribute
580 - reference values (other than CODE refs)
581 are no longer allowed for defaults
582 - added tests for this
584 * Class::MOP::Package
585 - fixed an issue with perl 5.8.1 and how it deals
586 with symbol tables. The namespace hash is now
587 always reloaded from the symbol table.
589 ~ lots of misc. documentation cleanup
591 0.32 Sat. Aug. 12, 2006
592 + added Class::MOP::Object so that the
593 metamodel is more complete (and closer
594 to what Perl 6 will probably be).
596 * Class::MOP::Package
597 - refactored entire class, this is now
598 the primary gateway between the metaclass
599 and the Perl 5 symbol table
600 - added many tests for this
601 - this class is now a subclass of
603 - added some tests to reflect this
606 - refactored all symbol table access to
607 use Class::MOP::Package methods instead
610 - adding the $:version attribute in the bootstrap
611 so that Module has a version as an attribute
612 - see comment in Class::MOP for details
613 - added the $:authority attribute to this module
614 as well as an &identifier method, to bring us
615 ever closer to Perl 6 goodness
616 - I have added $AUTHORITY to all the modules
617 - added tests for this
619 * Class::MOP::Instance
620 - added &deinitialize_slot for removing slots
622 - added tests for this
624 * Class::MOP::Attribute
625 - added support for &deinitialize_slot for removing
626 slots from an instance
627 - added tests for this
629 0.31 Sat. July 15, 2006
632 - added &find_method_by_name to locate a method
633 anywhere within the class hierarchy
635 * Class::MOP::Attribute
636 - added &set_value and &get_value for getting
637 the value of the attribute for a particular
640 0.30 Wed. July 5, 2006
641 ---------------------------------------
642 This is the first version of Class::MOP
643 to introduce the immutable features which
644 will be used for optimizating the MOP.
645 This support should still be considered
646 experimental, but moving towards stability.
647 ---------------------------------------
649 * Created Class::MOP::Class::Immutable
651 * Created the Class::MOP::Package and
652 Class::MOP::Module classes to more
653 closely conform to Perl 6's meta-model
656 - now inherits from Class::MOP::Module
657 - several methods moved to ::Module and
658 ::Package and now inherited
659 - added tests for this
661 * Class::MOP::Instance
662 - added an is_inlinable method to allow other
663 classes to check before they attempt to optimize.
664 - added an inline_create_instance to inline
665 instance creation (of course)
668 - the Class::MOP::Class::*_package_variable
669 methods are all now methods of Class::MOP::Package
670 and called *_package_symbol instead. This is
671 because they are now more general purpose symbol
672 table manipulation methods.
674 0.29_02 Thurs. June 22, 2006
675 ++ DEVELOPER RELEASE ++
677 - small change in &create so that it behaves
678 properly when inherited
679 - small fix to &clone_instance
681 0.29_01 Fri. May 12, 2006
682 ++ DEVELOPER RELEASE ++
683 - This release works in combination with
684 Moose 0.09_01, it is a developer release
685 because it introduces a new instance
686 sub-protocol and has not yet been
690 - anon-classes are now properly garbage collected
691 - added tests for this
692 - improved method modifier wrapping
694 * Class::MOP::Instance
695 - added new instance protocol
696 - added tests for this
697 - changed all relevant modules and examples
699 - Class::MOP::Attribute
703 - you no longer need to specify the metaclass
704 itself, if it is not there, Class::MOP::Class
706 - updated tests for this
709 - added ArrayBasedStorage example to show
710 instance storage using ARRAY refs instead of
712 - added tests for this
713 - InsideOutClass is totally revised using the
714 new instance protocol
715 - added more tests for this
717 0.26 Mon. April 24, 2006
719 - added find_attribute_by_name method
720 - added tests and docs for this
721 - some small optimizations
723 * Class::MOP::Attribute
724 - some small optimizations
726 0.25 Thurs. April 20, 2006
728 - added create_anon_class for creating anonymous classes
729 - added tests for this
730 - added get_all_metaclasses, get_all_metaclass_names
731 and get_all_metaclass_instances method to allow
732 access to all the cached metaclass objects.
733 - attribute slot initialization is now the responsibility
734 of the attribute itself, and construct_instance now
735 delegates appropriately
737 * Class::MOP::Attribute
738 - attribute slot initialization is now the responsibility
739 of the attribute itself, so we added a method for it
740 called initialize_instance_slot
743 - adjusted all the examples to use the new attribute
744 initialize_instance_slot method
746 0.24 Tues. April 11, 2006
748 - cleaned up how the before/after/around method
749 modifiers get named with Sub::Name
751 0.23 Thurs. March 30, 2006
753 - fixed the way attribute defaults are handled
754 during instance construction (bug found by chansen)
756 * Class::MOP::Attribute
757 - read-only accessors ('reader') will now die if
758 passed more than one argument (attempting to write
760 - added tests for this
761 - adjusted all /example files to comply
763 0.22 Mon. March 20, 2006
765 - localized $@ in the *_package_variable functions
766 because otherwise, it does ugly things in Moose.
767 - added test case for this
769 0.21 Wed. March 15, 2006
771 - fixed issue where metaclasses are reaped from
772 our cache in global destruction, and so are not
773 available in DESTORY calls
775 0.20 Thurs. March 2, 2006
776 - removed the dependency for Clone since
777 we no longer to deep-cloning by default.
780 - added &package_name, &name and
781 &fully_qualified_name methods, some of
782 which were formerly private subs in
785 * Class::MOP::Method::Wrapped
786 - allows for a method to be wrapped with
787 before, after and around modifiers
788 - added tests and docs for this feature
791 - improved &get_package_symbol
792 - &version and &superclasses now use it
793 - methods are now blessed into Class::MOP::Method
795 - added methods to install CLOS-style method modifiers
796 - &add_before_method_modifier
797 - &add_after_method_modifier
798 - &add_around_method_modifier
799 - added tests and docs for these
800 - added &find_next_method_by_name which finds the
801 equivalent of SUPER::method_name
803 0.12 Thurs. Feb 23, 2006
804 - reduced the dependency on B, no need to always
808 - added docs to the C3 method dispatch order test
809 - fixed missing Algorithm::C3 dependency by making
810 the test skip if it is not installed
812 0.11 Mon Feb. 20, 2006
814 - added example of changing method dispatch order to C3
817 - changed how clone_instance behaves, it now only does a
818 shallow clone (see docs for more details)
819 - added docs and tests
821 0.10 Tues Feb. 14, 2006
822 ** This release was mostly about writing more tests and
823 cleaning out old and dusty code, the MOP should now
824 be considered "ready to use".
826 - adding more tests to get coverage up a little higher,
827 mostly testing errors and edge cases.
828 - test coverage is now at 99%
831 - no longer optionally exports to UNIVERSAL::meta or
832 creates a custom metaclass generator, use the
833 metaclass pragma instead.
836 - fixed a number of minor issues which came up in the
837 error/edge-case tests
839 * Class::MOP::Attribute
840 - fixed a number of minor issues which came up in the
841 error/edge-case tests
844 - fixing the AttributesWithHistory example, it was broken.
846 0.06 Thurs Feb. 9, 2006
848 - adding new metaclass pragma to make setting up the
849 metaclass a little more straightforward
852 - clean up bootstrapping to include more complete
853 attribute definitions for Class::MOP::Class and
854 Class::MOP::Attribute (accessors, readers, writers,
855 etc.) ... it is redundant, but is useful meta-info
859 - fixing minor meta-circularity issue with &meta, it
860 is now more useful for subclasses
861 - added &get_attribute_map as an accessor for the
862 hash of attribute meta objects
863 - &compute_all_applicable_attributes now just returns
864 the attribute meta-object, rather than the HASH ref
865 since all the same info can be gotten from the
866 attribute meta-object itself
867 - updated docs & tests to reflect
868 - added &clone_instance method which does a deep clone
869 of the instance structure created by &construct_instance
870 - added docs & tests for this
871 - added Clone as a dependency
872 - added &new_object and &clone_object convience methods to
873 return blessed new or cloned instances
874 - they handle Class::MOP::Class singletons correctly too
875 - added docs & tests for this
876 - cleaned up the &constuct_class_instance so that it behaves
877 more like &construct_instance (and managed the singletons too)
878 - added the &check_metaclass_compatibility method to make sure
879 that metaclasses are upward and downward compatible.
880 - added tests and docs for this
883 - adjusting code to use the &Class::MOP::Class::meta
885 - adjusting code to use the metaclass pragma
887 0.05 Sat Feb. 4, 2006
889 - added the &attribute_metaclass and &method_metaclass
890 attributes which contain a metaclass name to use for
891 attributes/methods respectively
894 - bootstrap additional attributes for Class::MOP::Class
897 - adjusted the example code and tests to use the new
898 &attribute_metaclass feature of Class::MOP::Class
902 0.04 Fri Feb. 3, 2006
904 - some documentation suggestions from #perl6
906 * Class::MOP::Attribute
907 - improved error messages
910 - added new examples:
911 - AttributesWithHistory
912 - ClassEncapsultedAttributes
914 0.03 Fri Feb. 3, 2006
915 - converted to Module::Build instead of EU::MM
917 * Class::MOP::Attribute
918 - refactored method generation code
919 - attributes are now associated with class directly
922 - refactored the InsideOut example to take advantage
923 of the Class::MOP::Attribute refactoring
924 - changed example files to .pod files and hide thier
925 package names from PAUSE (I don't want to own these
926 namespaces really, they are just examples)
928 0.02 Thurs Feb. 2, 2006
929 - moving examples from t/lib/* to examples/*
930 - adding POD documentation to the examples
932 0.01 Thurs Feb. 2, 2006