1 Revision history for Perl extension Class-MOP.
3 0.55 Mon. April 28, 2008
4 - All classes now have proper C3 MRO support
5 - added MRO::Compat as a dependency to allow
6 for the C3 MRO support to Just Work in all
10 - rebless_instance now returns the instance
11 it has just blessed, this is mostly to
13 - set the attr correctly in rebless_instance
14 when it has no init_arg
15 - tweaked &linear_isa and &class_precedence_list
16 to support c3 classes.
18 0.54 Fri. March, 14, 2008
21 - making sure that load_class never gets
22 passed a value from @_ or $_ to squash
23 Ovid's bug (http://use.perl.org/~Ovid/journal/35763)
26 - make_{immutable,mutable} now return 1
28 - improved error handling in ->create method
29 - rebless_instance now takes extra params which
30 will be used to populate values
31 - added tests for this
34 - localizing the Data::Dumper configurations so
35 that it does not pollute others (RT #33509)
42 - these classes no longer define their own ->meta,
43 but instead just inherit from Class::MOP::Object
45 * Class::MOP::Instance
47 - these classes now inherit from Class::MOP::Object
50 - fixed the filename length on several
51 test files so we install on VMS better
53 - fixed incorrect use of catdir when it
54 should be catfile (RT #32385)
56 0.53 Thurs. Feb. 14, 1008
57 ~~ several doc. fixes and updates ~~
60 Class::MOP::Method::Constructor
62 - making init_arg accept an undefined value
63 to indicate that no constructor args can
64 be passed (thanks to nothingmuch)
65 - added tests for this
66 - added attribute initializer attribute (rjbs)
69 - making this use the new init_arg => undef
70 feature instead of the silly hack from
71 before (thanks to nothingmuch)
73 0.52 Tues. Jan. 22, 2008
75 - fixed bug in rebless_instance
78 * Class::MOP::Method::Constructor
79 - removed assumptions about the existence of
82 0.51 Mon. Jan. 14, 2008
83 ~~~ some misc. doc. fixes ~~~
84 ~~ updated copyright dates ~~
87 - now sets the IS_RUNNING_ON_5_10
88 constant so that we can take advantage
89 of some of the nice bits of 5.10
92 - uses the IS_RUNNING_ON_5_10 flag to
93 optimize the &linearized_isa method
94 and avoid the hack/check for circular
95 inheritence in &class_precedence_list
96 - added rebless_instance method (Sartak)
97 - added tests for this
99 * Class::MOP::Immutable
100 - the immutable class now keeps track of
101 the transformer which immutablized it
103 * Class::MOP::Instance
104 - added rebless_instance_structure method (Sartak)
105 - added tests for this
107 0.50 Fri. Dec. 21, 2007
109 - fixed bug in immutable to make sure that
110 transformation arguments are saved
112 - added tests for this
114 * Class::MOP::Immutable
115 - fixed a bug (see above)
117 * Class::MOP::Attribute
120 0.49 Fri. Dec. 14, 2007
121 !! Class::MOP now loads 2 x faster !!
122 !! with XS speedups (thanks konobi) !!
125 - removed the dependency on B
126 - added two XS functions (thanks konobi)
127 - get_code_info($code) which replaces all
128 the B fiddling we were doing with
129 faster/leaner XS level fiddling
130 - check_package_cache_flag($pkg_name) which
131 returns the PL_sub_generation variable to
132 be used to help manage method caching.
135 In 5.10 or greater this will actually
136 use the mro::get_pkg_gen instead to give
137 even more accurate caching information.
138 blblack++ for that stuff :)
141 - added the &subclasses method (thanks rlb)
142 - added the update_package_cache_flag and
143 reset_package_cache_flag which help keep
144 track of when we need to re-fetch the
146 - Several small improvements to take advantage
147 of the new method map caching features
149 0.48 Mon. Nov. 26, 2007
150 * Class::MOP::Attribute
151 - fixed get_read/write_method to handle the
152 HASH ref case, which makes the
153 get_read/write_method_ref handle it too.
154 - added more tests for this
156 0.47 Sat. Nov. 24, 2007
157 * Class::MOP::Attribute
158 - fixed misspelling in get_write_method_ref
159 - added more tests for this
161 0.46 Fri. Nov. 23, 2007
163 - added the linearized_isa method instead of constantly
164 pruning duplicate classes (this will be even more
165 useful in the 5.10-compat version coming soon)
167 * Class::MOP::Attribute
168 - added the get_read_method_ref and get_write_method_ref
169 methods which allow you to retrieve a CODE ref which
170 can always be used to read or write an attribute.
172 0.45 Thurs. Nov. 13, 2007
173 * Class::MOP::Attribute
174 - Fix error message on confess (groditi)
176 0.44 Thurs. Nov. 13, 2007
177 - Apparently I didn't make dist correctly (groditi)
179 0.43 Thurs. Nov. 13, 2007
181 - Add support for the 'builder' attribute (groditi)
184 - optimise metaclass-already-exists check in
185 construct_class_instance (groditi)
186 - duplicate check into initialize to save a
187 call through (groditi)
189 * Class::MOP::Attribute
190 - Add support for the 'builder' attribute (groditi)
191 - Make predicates check for the existence of a value, not whether
192 it is defined (groditi)
194 * Class::MOP::Instance
195 - Make predicates check for the existence of a value, not whether
196 it is defined (groditi)
198 * Class::MOP::Method::Accessor
199 - made this a subclass of Class::MOP::Method::Generated
200 - removed the relevant attributes
202 * Class::MOP::Method::Constructor
203 - fixed the cached values we had to be more sane
204 - made this a subclass of Class::MOP::Method::Generated
205 - fixed generated constructor so it properly handles
207 - added tests for this
208 - added the option to allow for both inlined and
209 non-inlined constructors.
210 - Update inlined methods for builder and predicate changes (groditi)
212 * Class::MOP::Method::Generated
213 - added this class as an abstract base for the
214 Class::MOP::Method::{Constructor,Accessor} classes
215 - added tests for this
218 - Alter tests (005, 014 020, 021) for new builder addition (groditi)
219 - Tests for new predicate behavior (and corrections to old tests) (groditi)
222 - Update ArrayRef based class example to work with predicate changes
224 0.42 Mon. July 16, 2007
225 !!! Horray for mst, he fixed it !!!
227 * Class::MOP::Package
228 - alter symbol table handling to deal with 5.8.x and 5.9.x
231 - Get rid of the crappy workaround from 0.40/41
233 0.41 Sun. July 15, 2007
235 Arghh!!! My TODO test didn't work, so I handle
236 it manually now so that people can use this
237 with 5.9.5/bleadperl without issue.
239 0.40 Tues, July 3, 2007
241 ~ marked a test in 003_methods.t as TODO
242 for perl 5.9.5 (this test is irrelvant to
243 the module functioning on 5.9.5 for the most
246 0.39 Mon. June 18, 2007
247 * Class::MOP::Immutable
248 - added make_metaclass_mutable + docs (groditi)
249 - removed unused variable
250 - added create_immutable_transformer
251 necessary for sane overloading of immutable behavior
252 - tests for this (groditi)
255 - Immutability can now be undone,
256 added make_mutable + tests + docs (groditi)
257 - Massive changes to the way Immutable is done
258 for details see comments next to make_immutable
259 This fixes a bug where custom metaclasses broke
260 when made immutable. We are now keeping one immutable
261 metaclass instance per metaclass instead of just one
262 to prevent isa hierarchy corruption. Memory use will go
263 up, but I suspect it will be neglible.
264 - New tests added for this behavior. (groditi)
266 0.38 Thurs. May 31, 2007
267 ~~ More documentation updates ~~
269 * Class::MOP::Package
270 - we now deal with stub methods properly
271 - added tests for this
272 - fixed some tests failing on 5.9.5 (thanks blblack)
274 * Class::MOP::Attribute
275 - added get_read_method and get_write_method
276 thanks to groditi for this code, tests
278 - added tests and POD for this
281 - fixed RT issue #27329, clone object now
282 handles undef values correctly.
283 - added tests for this
284 - Corrected anon-class handling so that they
285 will not get reaped when instances still
286 exist which need to reference them. This is
287 the correct behavior, hopefully this is an
288 obscure enough feature that there are not too
289 many work arounds out in the wild.
290 - added tests for this by groditi
291 - updated docs to explain this
294 - load custom metaclasses automatically (thanks groditi)
295 - added tests for this behavior
297 0.37 Sat. March 10, 2007
298 ~~ Many, many documentation updates ~~
301 - added &load_class and &is_class_loaded
302 - added tests and docs for these
304 * Class::MOP::Attribute
305 - default now checks the instance with defined to
306 avoid setting off bool-overloads (found by Carl Franks)
310 - bad name in a test, causing meaningless failuress.
316 - All attribute names are now consistent and follow Perl 6
317 style (prefixed with the sigil, and ! as the twigil for
318 private attrs). This should not affect any code, unless
319 you broke encapsulation, in which case, it is your problem
322 !! Class::MOP::Class::Immutable has been removed
324 * Class::MOP::Method::Constructor
325 - this has been moved out of Class::MOP::Class::Immutable
326 and is a proper subclass of Class::MOP::Method now.
329 - this module now uses Class::MOP::Immutable for the
330 immutable transformation instead of
331 Class::MOP::Class::Immutable.
333 + Class::MOP::Immutable
334 - this module now controls the transformation from a mutable
335 to an immutable version of the class. Docs for this will
336 be coming eventually.
339 0.36 Sun. Nov. 5, 2006
341 - added a few 'no warnings' lines to keep annoying
342 (and meaningless) warnings from chirping during
346 - some more bootstrapping is now done on the new
349 * Class::MOP::Class::Immutable
351 - constructor generation is now handled by
352 the Class::MOP::Method::Constructor class
354 * Class::MOP::Method::Constructor
355 - created this to handle constructor generation
356 in Class::MOP::Class::Immutable
358 * Class::MOP::Attribute
360 - attributes now delegate to the
361 Class::MOP::Method::Accessor to generate
364 * Class::MOP::Method::Accessor
365 - all accessor generation functions from
366 Class::MOP::Attribute have been moved here
368 0.35 Sat. Sept. 30, 2006
370 * scripts/class_browser.pl
371 - initial prototype of a class browser, more
372 on this to come. Comments and patches are
376 - All Class::MOP::* accessors are no longer
377 re-generated in the bootstrap, instead
378 they are aliased from the originals
379 - fixed tests to reflect
380 - added Class::MOP::Method (and its subclasses)
382 - adjusted tests for this
383 - added the Class::MOP::Instance attributes
388 - methods are no longer blessed CODE refs
389 but are actual objects which can be CODE-ified
390 - adjusted tests to compensate
391 - adjusted docs for this
394 - changed how methods are dealt with to
395 encapsulate most of the work into the
396 &get_method_map method
397 - made several adjustments for the change
398 in Class::MOP::Method
399 - &add_attribute now checks if you are adding
400 a duplicate name, and properly removes the
401 old one before installing the new one
402 - added tests for this
403 - adjusted docs for this
405 * Class::MOP::Class::Immutable
406 - added caching of &get_method_map
407 - fixed issue with &get_package_symbol
408 - cleaned up the methods that die (patch by David Wheeler)
410 * Class::MOP::Package
411 - added filtering capabilities to
412 &list_all_package_symbols
414 0.34 Sat. Aug. 26, 2006
416 - added the %:methods attribute, which like
417 the $:version and such just actually goes
418 to the symbol table to get it's stuff.
419 However, it makes the MOP more complete.
421 - The &create method now requires that all
422 but the package name now is passed in as
423 named parameters. See docs for more info.
424 - updated docs and tests for this
427 - added &dump method to easily Data::Dumper
431 - cleaned up the initialization of attributes
432 which do not store things in the instance
433 - added the %:methods attribute definition to
436 ~ lots of misc. test cleanup
438 0.33 Sat. Aug. 19, 2006
440 - moved the metaclass cache out of here
441 and it is now in Class::MOP itself.
444 - moved all the metaclass cache stuff here
445 - fixed all tests for this
447 * Class::MOP::Attribute
448 - reference values (other than CODE refs)
449 are no longer allowed for defaults
450 - added tests for this
452 * Class::MOP::Package
453 - fixed an issue with perl 5.8.1 and how it deals
454 with symbol tables. The namespace hash is now
455 always reloaded from the symbol table.
457 ~ lots of misc. documentation cleanup
459 0.32 Sat. Aug. 12, 2006
460 + added Class::MOP::Object so that the
461 metamodel is more complete (and closer
462 to what Perl 6 will probably be).
464 * Class::MOP::Package
465 - refactored entire class, this is now
466 the primary gateway between the metaclass
467 and the Perl 5 symbol table
468 - added many tests for this
469 - this class is now a subclass of
471 - added some tests to reflect this
474 - refactored all symbol table access to
475 use Class::MOP::Package methods instead
478 - adding the $:version attribute in the bootstrap
479 so that Module has a version as an attribute
480 - see comment in Class::MOP for details
481 - added the $:authority attribute to this module
482 as well as an &identifier method, to bring us
483 ever closer to Perl 6 goodness
484 - I have added $AUTHORITY to all the modules
485 - added tests for this
487 * Class::MOP::Instance
488 - added &deinitialize_slot for removing slots
490 - added tests for this
492 * Class::MOP::Attribute
493 - added support for &deinitialize_slot for removing
494 slots from an instance
495 - added tests for this
497 0.31 Sat. July 15, 2006
500 - added &find_method_by_name to locate a method
501 anywhere within the class hierarchy
503 * Class::MOP::Attribute
504 - added &set_value and &get_value for getting
505 the value of the attribute for a particular
508 0.30 Wed. July 5, 2006
509 ---------------------------------------
510 This is the first version of Class::MOP
511 to introduce the immutable features which
512 will be used for optimizating the MOP.
513 This support should still be considered
514 experimental, but moving towards stability.
515 ---------------------------------------
517 * Created Class::MOP::Class::Immutable
519 * Created the Class::MOP::Package and
520 Class::MOP::Module classes to more
521 closely conform to Perl 6's meta-model
524 - now inherits from Class::MOP::Module
525 - several methods moved to ::Module and
526 ::Package and now inherited
527 - added tests for this
529 * Class::MOP::Instance
530 - added an is_inlinable method to allow other
531 classes to check before they attempt to optimize.
532 - added an inline_create_instance to inline
533 instance creation (of course)
536 - the Class::MOP::Class::*_package_variable
537 methods are all now methods of Class::MOP::Package
538 and called *_package_symbol instead. This is
539 because they are now more general purpose symbol
540 table manipulation methods.
542 0.29_02 Thurs. June 22, 2006
543 ++ DEVELOPER RELEASE ++
545 - small change in &create so that it behaves
546 properly when inherited
547 - small fix to &clone_instance
549 0.29_01 Fri. May 12, 2006
550 ++ DEVELOPER RELEASE ++
551 - This release works in combination with
552 Moose 0.09_01, it is a developer release
553 because it introduces a new instance
554 sub-protocol and has not yet been
558 - anon-classes are now properly garbage collected
559 - added tests for this
560 - improved method modifier wrapping
562 * Class::MOP::Instance
563 - added new instance protocol
564 - added tests for this
565 - changed all relevant modules and examples
567 - Class::MOP::Attribute
571 - you no longer need to specify the metaclass
572 itself, if it is not there, Class::MOP::Class
574 - updated tests for this
577 - added ArrayBasedStorage example to show
578 instance storage using ARRAY refs instead of
580 - added tests for this
581 - InsideOutClass is totally revised using the
582 new instance protocol
583 - added more tests for this
585 0.26 Mon. April 24, 2006
587 - added find_attribute_by_name method
588 - added tests and docs for this
589 - some small optimizations
591 * Class::MOP::Attribute
592 - some small optimizations
594 0.25 Thurs. April 20, 2006
596 - added create_anon_class for creating anonymous classes
597 - added tests for this
598 - added get_all_metaclasses, get_all_metaclass_names
599 and get_all_metaclass_instances method to allow
600 access to all the cached metaclass objects.
601 - attribute slot initialization is now the responsibility
602 of the attribute itself, and construct_instance now
603 delegates appropriately
605 * Class::MOP::Attribute
606 - attribute slot initialization is now the responsibility
607 of the attribute itself, so we added a method for it
608 called initialize_instance_slot
611 - adjusted all the examples to use the new attribute
612 initialize_instance_slot method
614 0.24 Tues. April 11, 2006
616 - cleaned up how the before/after/around method
617 modifiers get named with Sub::Name
619 0.23 Thurs. March 30, 2006
621 - fixed the way attribute defaults are handled
622 during instance construction (bug found by chansen)
624 * Class::MOP::Attribute
625 - read-only accessors ('reader') will now die if
626 passed more than one argument (attempting to write
628 - added tests for this
629 - adjusted all /example files to comply
631 0.22 Mon. March 20, 2006
633 - localized $@ in the *_package_variable functions
634 because otherwise, it does ugly things in Moose.
635 - added test case for this
637 0.21 Wed. March 15, 2006
639 - fixed issue where metaclasses are reaped from
640 our cache in global destruction, and so are not
641 available in DESTORY calls
643 0.20 Thurs. March 2, 2006
644 - removed the dependency for Clone since
645 we no longer to deep-cloning by default.
648 - added &package_name, &name and
649 &fully_qualified_name methods, some of
650 which were formerly private subs in
653 * Class::MOP::Method::Wrapped
654 - allows for a method to be wrapped with
655 before, after and around modifiers
656 - added tests and docs for this feature
659 - improved &get_package_symbol
660 - &version and &superclasses now use it
661 - methods are now blessed into Class::MOP::Method
663 - added methods to install CLOS-style method modifiers
664 - &add_before_method_modifier
665 - &add_after_method_modifier
666 - &add_around_method_modifier
667 - added tests and docs for these
668 - added &find_next_method_by_name which finds the
669 equivalent of SUPER::method_name
671 0.12 Thurs. Feb 23, 2006
672 - reduced the dependency on B, no need to always
676 - added docs to the C3 method dispatch order test
677 - fixed missing Algorithm::C3 dependency by making
678 the test skip if it is not installed
680 0.11 Mon Feb. 20, 2006
682 - added example of changing method dispatch order to C3
685 - changed how clone_instance behaves, it now only does a
686 shallow clone (see docs for more details)
687 - added docs and tests
689 0.10 Tues Feb. 14, 2006
690 ** This release was mostly about writing more tests and
691 cleaning out old and dusty code, the MOP should now
692 be considered "ready to use".
694 - adding more tests to get coverage up a little higher,
695 mostly testing errors and edge cases.
696 - test coverage is now at 99%
699 - no longer optionally exports to UNIVERSAL::meta or
700 creates a custom metaclass generator, use the
701 metaclass pragma instead.
704 - fixed a number of minor issues which came up in the
705 error/edge-case tests
707 * Class::MOP::Attribute
708 - fixed a number of minor issues which came up in the
709 error/edge-case tests
712 - fixing the AttributesWithHistory example, it was broken.
714 0.06 Thurs Feb. 9, 2006
716 - adding new metaclass pragma to make setting up the
717 metaclass a little more straightforward
720 - clean up bootstrapping to include more complete
721 attribute definitions for Class::MOP::Class and
722 Class::MOP::Attribute (accessors, readers, writers,
723 etc.) ... it is redundant, but is useful meta-info
727 - fixing minor meta-circularity issue with &meta, it
728 is now more useful for subclasses
729 - added &get_attribute_map as an accessor for the
730 hash of attribute meta objects
731 - &compute_all_applicable_attributes now just returns
732 the attribute meta-object, rather than the HASH ref
733 since all the same info can be gotten from the
734 attribute meta-object itself
735 - updated docs & tests to reflect
736 - added &clone_instance method which does a deep clone
737 of the instance structure created by &construct_instance
738 - added docs & tests for this
739 - added Clone as a dependency
740 - added &new_object and &clone_object convience methods to
741 return blessed new or cloned instances
742 - they handle Class::MOP::Class singletons correctly too
743 - added docs & tests for this
744 - cleaned up the &constuct_class_instance so that it behaves
745 more like &construct_instance (and managed the singletons too)
746 - added the &check_metaclass_compatibility method to make sure
747 that metaclasses are upward and downward compatible.
748 - added tests and docs for this
751 - adjusting code to use the &Class::MOP::Class::meta
753 - adjusting code to use the metaclass pragma
755 0.05 Sat Feb. 4, 2006
757 - added the &attribute_metaclass and &method_metaclass
758 attributes which contain a metaclass name to use for
759 attributes/methods respectively
762 - bootstrap additional attributes for Class::MOP::Class
765 - adjusted the example code and tests to use the new
766 &attribute_metaclass feature of Class::MOP::Class
770 0.04 Fri Feb. 3, 2006
772 - some documentation suggestions from #perl6
774 * Class::MOP::Attribute
775 - improved error messages
778 - added new examples:
779 - AttributesWithHistory
780 - ClassEncapsultedAttributes
782 0.03 Fri Feb. 3, 2006
783 - converted to Module::Build instead of EU::MM
785 * Class::MOP::Attribute
786 - refactored method generation code
787 - attributes are now associated with class directly
790 - refactored the InsideOut example to take advantage
791 of the Class::MOP::Attribute refactoring
792 - changed example files to .pod files and hide thier
793 package names from PAUSE (I don't want to own these
794 namespaces really, they are just examples)
796 0.02 Thurs Feb. 2, 2006
797 - moving examples from t/lib/* to examples/*
798 - adding POD documentation to the examples
800 0.01 Thurs Feb. 2, 2006