1 Revision history for Perl extension Class-MOP.
4 * Class::MOP::Attribute
5 - add has_read_method and has_write_method
7 0.55 Mon. April 28, 2008
8 - All classes now have proper C3 MRO support
9 - added MRO::Compat as a dependency to allow
10 for the C3 MRO support to Just Work in all
14 - rebless_instance now returns the instance
15 it has just blessed, this is mostly to
17 - set the attr correctly in rebless_instance
18 when it has no init_arg
19 - tweaked &linear_isa and &class_precedence_list
20 to support c3 classes.
22 0.54 Fri. March, 14, 2008
25 - making sure that load_class never gets
26 passed a value from @_ or $_ to squash
27 Ovid's bug (http://use.perl.org/~Ovid/journal/35763)
30 - make_{immutable,mutable} now return 1
32 - improved error handling in ->create method
33 - rebless_instance now takes extra params which
34 will be used to populate values
35 - added tests for this
38 - localizing the Data::Dumper configurations so
39 that it does not pollute others (RT #33509)
46 - these classes no longer define their own ->meta,
47 but instead just inherit from Class::MOP::Object
49 * Class::MOP::Instance
51 - these classes now inherit from Class::MOP::Object
54 - fixed the filename length on several
55 test files so we install on VMS better
57 - fixed incorrect use of catdir when it
58 should be catfile (RT #32385)
60 0.53 Thurs. Feb. 14, 1008
61 ~~ several doc. fixes and updates ~~
64 Class::MOP::Method::Constructor
66 - making init_arg accept an undefined value
67 to indicate that no constructor args can
68 be passed (thanks to nothingmuch)
69 - added tests for this
70 - added attribute initializer attribute (rjbs)
73 - making this use the new init_arg => undef
74 feature instead of the silly hack from
75 before (thanks to nothingmuch)
77 0.52 Tues. Jan. 22, 2008
79 - fixed bug in rebless_instance
82 * Class::MOP::Method::Constructor
83 - removed assumptions about the existence of
86 0.51 Mon. Jan. 14, 2008
87 ~~~ some misc. doc. fixes ~~~
88 ~~ updated copyright dates ~~
91 - now sets the IS_RUNNING_ON_5_10
92 constant so that we can take advantage
93 of some of the nice bits of 5.10
96 - uses the IS_RUNNING_ON_5_10 flag to
97 optimize the &linearized_isa method
98 and avoid the hack/check for circular
99 inheritence in &class_precedence_list
100 - added rebless_instance method (Sartak)
101 - added tests for this
103 * Class::MOP::Immutable
104 - the immutable class now keeps track of
105 the transformer which immutablized it
107 * Class::MOP::Instance
108 - added rebless_instance_structure method (Sartak)
109 - added tests for this
111 0.50 Fri. Dec. 21, 2007
113 - fixed bug in immutable to make sure that
114 transformation arguments are saved
116 - added tests for this
118 * Class::MOP::Immutable
119 - fixed a bug (see above)
121 * Class::MOP::Attribute
124 0.49 Fri. Dec. 14, 2007
125 !! Class::MOP now loads 2 x faster !!
126 !! with XS speedups (thanks konobi) !!
129 - removed the dependency on B
130 - added two XS functions (thanks konobi)
131 - get_code_info($code) which replaces all
132 the B fiddling we were doing with
133 faster/leaner XS level fiddling
134 - check_package_cache_flag($pkg_name) which
135 returns the PL_sub_generation variable to
136 be used to help manage method caching.
139 In 5.10 or greater this will actually
140 use the mro::get_pkg_gen instead to give
141 even more accurate caching information.
142 blblack++ for that stuff :)
145 - added the &subclasses method (thanks rlb)
146 - added the update_package_cache_flag and
147 reset_package_cache_flag which help keep
148 track of when we need to re-fetch the
150 - Several small improvements to take advantage
151 of the new method map caching features
153 0.48 Mon. Nov. 26, 2007
154 * Class::MOP::Attribute
155 - fixed get_read/write_method to handle the
156 HASH ref case, which makes the
157 get_read/write_method_ref handle it too.
158 - added more tests for this
160 0.47 Sat. Nov. 24, 2007
161 * Class::MOP::Attribute
162 - fixed misspelling in get_write_method_ref
163 - added more tests for this
165 0.46 Fri. Nov. 23, 2007
167 - added the linearized_isa method instead of constantly
168 pruning duplicate classes (this will be even more
169 useful in the 5.10-compat version coming soon)
171 * Class::MOP::Attribute
172 - added the get_read_method_ref and get_write_method_ref
173 methods which allow you to retrieve a CODE ref which
174 can always be used to read or write an attribute.
176 0.45 Thurs. Nov. 13, 2007
177 * Class::MOP::Attribute
178 - Fix error message on confess (groditi)
180 0.44 Thurs. Nov. 13, 2007
181 - Apparently I didn't make dist correctly (groditi)
183 0.43 Thurs. Nov. 13, 2007
185 - Add support for the 'builder' attribute (groditi)
188 - optimise metaclass-already-exists check in
189 construct_class_instance (groditi)
190 - duplicate check into initialize to save a
191 call through (groditi)
193 * Class::MOP::Attribute
194 - Add support for the 'builder' attribute (groditi)
195 - Make predicates check for the existence of a value, not whether
196 it is defined (groditi)
198 * Class::MOP::Instance
199 - Make predicates check for the existence of a value, not whether
200 it is defined (groditi)
202 * Class::MOP::Method::Accessor
203 - made this a subclass of Class::MOP::Method::Generated
204 - removed the relevant attributes
206 * Class::MOP::Method::Constructor
207 - fixed the cached values we had to be more sane
208 - made this a subclass of Class::MOP::Method::Generated
209 - fixed generated constructor so it properly handles
211 - added tests for this
212 - added the option to allow for both inlined and
213 non-inlined constructors.
214 - Update inlined methods for builder and predicate changes (groditi)
216 * Class::MOP::Method::Generated
217 - added this class as an abstract base for the
218 Class::MOP::Method::{Constructor,Accessor} classes
219 - added tests for this
222 - Alter tests (005, 014 020, 021) for new builder addition (groditi)
223 - Tests for new predicate behavior (and corrections to old tests) (groditi)
226 - Update ArrayRef based class example to work with predicate changes
228 0.42 Mon. July 16, 2007
229 !!! Horray for mst, he fixed it !!!
231 * Class::MOP::Package
232 - alter symbol table handling to deal with 5.8.x and 5.9.x
235 - Get rid of the crappy workaround from 0.40/41
237 0.41 Sun. July 15, 2007
239 Arghh!!! My TODO test didn't work, so I handle
240 it manually now so that people can use this
241 with 5.9.5/bleadperl without issue.
243 0.40 Tues, July 3, 2007
245 ~ marked a test in 003_methods.t as TODO
246 for perl 5.9.5 (this test is irrelvant to
247 the module functioning on 5.9.5 for the most
250 0.39 Mon. June 18, 2007
251 * Class::MOP::Immutable
252 - added make_metaclass_mutable + docs (groditi)
253 - removed unused variable
254 - added create_immutable_transformer
255 necessary for sane overloading of immutable behavior
256 - tests for this (groditi)
259 - Immutability can now be undone,
260 added make_mutable + tests + docs (groditi)
261 - Massive changes to the way Immutable is done
262 for details see comments next to make_immutable
263 This fixes a bug where custom metaclasses broke
264 when made immutable. We are now keeping one immutable
265 metaclass instance per metaclass instead of just one
266 to prevent isa hierarchy corruption. Memory use will go
267 up, but I suspect it will be neglible.
268 - New tests added for this behavior. (groditi)
270 0.38 Thurs. May 31, 2007
271 ~~ More documentation updates ~~
273 * Class::MOP::Package
274 - we now deal with stub methods properly
275 - added tests for this
276 - fixed some tests failing on 5.9.5 (thanks blblack)
278 * Class::MOP::Attribute
279 - added get_read_method and get_write_method
280 thanks to groditi for this code, tests
282 - added tests and POD for this
285 - fixed RT issue #27329, clone object now
286 handles undef values correctly.
287 - added tests for this
288 - Corrected anon-class handling so that they
289 will not get reaped when instances still
290 exist which need to reference them. This is
291 the correct behavior, hopefully this is an
292 obscure enough feature that there are not too
293 many work arounds out in the wild.
294 - added tests for this by groditi
295 - updated docs to explain this
298 - load custom metaclasses automatically (thanks groditi)
299 - added tests for this behavior
301 0.37 Sat. March 10, 2007
302 ~~ Many, many documentation updates ~~
305 - added &load_class and &is_class_loaded
306 - added tests and docs for these
308 * Class::MOP::Attribute
309 - default now checks the instance with defined to
310 avoid setting off bool-overloads (found by Carl Franks)
314 - bad name in a test, causing meaningless failuress.
320 - All attribute names are now consistent and follow Perl 6
321 style (prefixed with the sigil, and ! as the twigil for
322 private attrs). This should not affect any code, unless
323 you broke encapsulation, in which case, it is your problem
326 !! Class::MOP::Class::Immutable has been removed
328 * Class::MOP::Method::Constructor
329 - this has been moved out of Class::MOP::Class::Immutable
330 and is a proper subclass of Class::MOP::Method now.
333 - this module now uses Class::MOP::Immutable for the
334 immutable transformation instead of
335 Class::MOP::Class::Immutable.
337 + Class::MOP::Immutable
338 - this module now controls the transformation from a mutable
339 to an immutable version of the class. Docs for this will
340 be coming eventually.
343 0.36 Sun. Nov. 5, 2006
345 - added a few 'no warnings' lines to keep annoying
346 (and meaningless) warnings from chirping during
350 - some more bootstrapping is now done on the new
353 * Class::MOP::Class::Immutable
355 - constructor generation is now handled by
356 the Class::MOP::Method::Constructor class
358 * Class::MOP::Method::Constructor
359 - created this to handle constructor generation
360 in Class::MOP::Class::Immutable
362 * Class::MOP::Attribute
364 - attributes now delegate to the
365 Class::MOP::Method::Accessor to generate
368 * Class::MOP::Method::Accessor
369 - all accessor generation functions from
370 Class::MOP::Attribute have been moved here
372 0.35 Sat. Sept. 30, 2006
374 * scripts/class_browser.pl
375 - initial prototype of a class browser, more
376 on this to come. Comments and patches are
380 - All Class::MOP::* accessors are no longer
381 re-generated in the bootstrap, instead
382 they are aliased from the originals
383 - fixed tests to reflect
384 - added Class::MOP::Method (and its subclasses)
386 - adjusted tests for this
387 - added the Class::MOP::Instance attributes
392 - methods are no longer blessed CODE refs
393 but are actual objects which can be CODE-ified
394 - adjusted tests to compensate
395 - adjusted docs for this
398 - changed how methods are dealt with to
399 encapsulate most of the work into the
400 &get_method_map method
401 - made several adjustments for the change
402 in Class::MOP::Method
403 - &add_attribute now checks if you are adding
404 a duplicate name, and properly removes the
405 old one before installing the new one
406 - added tests for this
407 - adjusted docs for this
409 * Class::MOP::Class::Immutable
410 - added caching of &get_method_map
411 - fixed issue with &get_package_symbol
412 - cleaned up the methods that die (patch by David Wheeler)
414 * Class::MOP::Package
415 - added filtering capabilities to
416 &list_all_package_symbols
418 0.34 Sat. Aug. 26, 2006
420 - added the %:methods attribute, which like
421 the $:version and such just actually goes
422 to the symbol table to get it's stuff.
423 However, it makes the MOP more complete.
425 - The &create method now requires that all
426 but the package name now is passed in as
427 named parameters. See docs for more info.
428 - updated docs and tests for this
431 - added &dump method to easily Data::Dumper
435 - cleaned up the initialization of attributes
436 which do not store things in the instance
437 - added the %:methods attribute definition to
440 ~ lots of misc. test cleanup
442 0.33 Sat. Aug. 19, 2006
444 - moved the metaclass cache out of here
445 and it is now in Class::MOP itself.
448 - moved all the metaclass cache stuff here
449 - fixed all tests for this
451 * Class::MOP::Attribute
452 - reference values (other than CODE refs)
453 are no longer allowed for defaults
454 - added tests for this
456 * Class::MOP::Package
457 - fixed an issue with perl 5.8.1 and how it deals
458 with symbol tables. The namespace hash is now
459 always reloaded from the symbol table.
461 ~ lots of misc. documentation cleanup
463 0.32 Sat. Aug. 12, 2006
464 + added Class::MOP::Object so that the
465 metamodel is more complete (and closer
466 to what Perl 6 will probably be).
468 * Class::MOP::Package
469 - refactored entire class, this is now
470 the primary gateway between the metaclass
471 and the Perl 5 symbol table
472 - added many tests for this
473 - this class is now a subclass of
475 - added some tests to reflect this
478 - refactored all symbol table access to
479 use Class::MOP::Package methods instead
482 - adding the $:version attribute in the bootstrap
483 so that Module has a version as an attribute
484 - see comment in Class::MOP for details
485 - added the $:authority attribute to this module
486 as well as an &identifier method, to bring us
487 ever closer to Perl 6 goodness
488 - I have added $AUTHORITY to all the modules
489 - added tests for this
491 * Class::MOP::Instance
492 - added &deinitialize_slot for removing slots
494 - added tests for this
496 * Class::MOP::Attribute
497 - added support for &deinitialize_slot for removing
498 slots from an instance
499 - added tests for this
501 0.31 Sat. July 15, 2006
504 - added &find_method_by_name to locate a method
505 anywhere within the class hierarchy
507 * Class::MOP::Attribute
508 - added &set_value and &get_value for getting
509 the value of the attribute for a particular
512 0.30 Wed. July 5, 2006
513 ---------------------------------------
514 This is the first version of Class::MOP
515 to introduce the immutable features which
516 will be used for optimizating the MOP.
517 This support should still be considered
518 experimental, but moving towards stability.
519 ---------------------------------------
521 * Created Class::MOP::Class::Immutable
523 * Created the Class::MOP::Package and
524 Class::MOP::Module classes to more
525 closely conform to Perl 6's meta-model
528 - now inherits from Class::MOP::Module
529 - several methods moved to ::Module and
530 ::Package and now inherited
531 - added tests for this
533 * Class::MOP::Instance
534 - added an is_inlinable method to allow other
535 classes to check before they attempt to optimize.
536 - added an inline_create_instance to inline
537 instance creation (of course)
540 - the Class::MOP::Class::*_package_variable
541 methods are all now methods of Class::MOP::Package
542 and called *_package_symbol instead. This is
543 because they are now more general purpose symbol
544 table manipulation methods.
546 0.29_02 Thurs. June 22, 2006
547 ++ DEVELOPER RELEASE ++
549 - small change in &create so that it behaves
550 properly when inherited
551 - small fix to &clone_instance
553 0.29_01 Fri. May 12, 2006
554 ++ DEVELOPER RELEASE ++
555 - This release works in combination with
556 Moose 0.09_01, it is a developer release
557 because it introduces a new instance
558 sub-protocol and has not yet been
562 - anon-classes are now properly garbage collected
563 - added tests for this
564 - improved method modifier wrapping
566 * Class::MOP::Instance
567 - added new instance protocol
568 - added tests for this
569 - changed all relevant modules and examples
571 - Class::MOP::Attribute
575 - you no longer need to specify the metaclass
576 itself, if it is not there, Class::MOP::Class
578 - updated tests for this
581 - added ArrayBasedStorage example to show
582 instance storage using ARRAY refs instead of
584 - added tests for this
585 - InsideOutClass is totally revised using the
586 new instance protocol
587 - added more tests for this
589 0.26 Mon. April 24, 2006
591 - added find_attribute_by_name method
592 - added tests and docs for this
593 - some small optimizations
595 * Class::MOP::Attribute
596 - some small optimizations
598 0.25 Thurs. April 20, 2006
600 - added create_anon_class for creating anonymous classes
601 - added tests for this
602 - added get_all_metaclasses, get_all_metaclass_names
603 and get_all_metaclass_instances method to allow
604 access to all the cached metaclass objects.
605 - attribute slot initialization is now the responsibility
606 of the attribute itself, and construct_instance now
607 delegates appropriately
609 * Class::MOP::Attribute
610 - attribute slot initialization is now the responsibility
611 of the attribute itself, so we added a method for it
612 called initialize_instance_slot
615 - adjusted all the examples to use the new attribute
616 initialize_instance_slot method
618 0.24 Tues. April 11, 2006
620 - cleaned up how the before/after/around method
621 modifiers get named with Sub::Name
623 0.23 Thurs. March 30, 2006
625 - fixed the way attribute defaults are handled
626 during instance construction (bug found by chansen)
628 * Class::MOP::Attribute
629 - read-only accessors ('reader') will now die if
630 passed more than one argument (attempting to write
632 - added tests for this
633 - adjusted all /example files to comply
635 0.22 Mon. March 20, 2006
637 - localized $@ in the *_package_variable functions
638 because otherwise, it does ugly things in Moose.
639 - added test case for this
641 0.21 Wed. March 15, 2006
643 - fixed issue where metaclasses are reaped from
644 our cache in global destruction, and so are not
645 available in DESTORY calls
647 0.20 Thurs. March 2, 2006
648 - removed the dependency for Clone since
649 we no longer to deep-cloning by default.
652 - added &package_name, &name and
653 &fully_qualified_name methods, some of
654 which were formerly private subs in
657 * Class::MOP::Method::Wrapped
658 - allows for a method to be wrapped with
659 before, after and around modifiers
660 - added tests and docs for this feature
663 - improved &get_package_symbol
664 - &version and &superclasses now use it
665 - methods are now blessed into Class::MOP::Method
667 - added methods to install CLOS-style method modifiers
668 - &add_before_method_modifier
669 - &add_after_method_modifier
670 - &add_around_method_modifier
671 - added tests and docs for these
672 - added &find_next_method_by_name which finds the
673 equivalent of SUPER::method_name
675 0.12 Thurs. Feb 23, 2006
676 - reduced the dependency on B, no need to always
680 - added docs to the C3 method dispatch order test
681 - fixed missing Algorithm::C3 dependency by making
682 the test skip if it is not installed
684 0.11 Mon Feb. 20, 2006
686 - added example of changing method dispatch order to C3
689 - changed how clone_instance behaves, it now only does a
690 shallow clone (see docs for more details)
691 - added docs and tests
693 0.10 Tues Feb. 14, 2006
694 ** This release was mostly about writing more tests and
695 cleaning out old and dusty code, the MOP should now
696 be considered "ready to use".
698 - adding more tests to get coverage up a little higher,
699 mostly testing errors and edge cases.
700 - test coverage is now at 99%
703 - no longer optionally exports to UNIVERSAL::meta or
704 creates a custom metaclass generator, use the
705 metaclass pragma instead.
708 - fixed a number of minor issues which came up in the
709 error/edge-case tests
711 * Class::MOP::Attribute
712 - fixed a number of minor issues which came up in the
713 error/edge-case tests
716 - fixing the AttributesWithHistory example, it was broken.
718 0.06 Thurs Feb. 9, 2006
720 - adding new metaclass pragma to make setting up the
721 metaclass a little more straightforward
724 - clean up bootstrapping to include more complete
725 attribute definitions for Class::MOP::Class and
726 Class::MOP::Attribute (accessors, readers, writers,
727 etc.) ... it is redundant, but is useful meta-info
731 - fixing minor meta-circularity issue with &meta, it
732 is now more useful for subclasses
733 - added &get_attribute_map as an accessor for the
734 hash of attribute meta objects
735 - &compute_all_applicable_attributes now just returns
736 the attribute meta-object, rather than the HASH ref
737 since all the same info can be gotten from the
738 attribute meta-object itself
739 - updated docs & tests to reflect
740 - added &clone_instance method which does a deep clone
741 of the instance structure created by &construct_instance
742 - added docs & tests for this
743 - added Clone as a dependency
744 - added &new_object and &clone_object convience methods to
745 return blessed new or cloned instances
746 - they handle Class::MOP::Class singletons correctly too
747 - added docs & tests for this
748 - cleaned up the &constuct_class_instance so that it behaves
749 more like &construct_instance (and managed the singletons too)
750 - added the &check_metaclass_compatibility method to make sure
751 that metaclasses are upward and downward compatible.
752 - added tests and docs for this
755 - adjusting code to use the &Class::MOP::Class::meta
757 - adjusting code to use the metaclass pragma
759 0.05 Sat Feb. 4, 2006
761 - added the &attribute_metaclass and &method_metaclass
762 attributes which contain a metaclass name to use for
763 attributes/methods respectively
766 - bootstrap additional attributes for Class::MOP::Class
769 - adjusted the example code and tests to use the new
770 &attribute_metaclass feature of Class::MOP::Class
774 0.04 Fri Feb. 3, 2006
776 - some documentation suggestions from #perl6
778 * Class::MOP::Attribute
779 - improved error messages
782 - added new examples:
783 - AttributesWithHistory
784 - ClassEncapsultedAttributes
786 0.03 Fri Feb. 3, 2006
787 - converted to Module::Build instead of EU::MM
789 * Class::MOP::Attribute
790 - refactored method generation code
791 - attributes are now associated with class directly
794 - refactored the InsideOut example to take advantage
795 of the Class::MOP::Attribute refactoring
796 - changed example files to .pod files and hide thier
797 package names from PAUSE (I don't want to own these
798 namespaces really, they are just examples)
800 0.02 Thurs Feb. 2, 2006
801 - moving examples from t/lib/* to examples/*
802 - adding POD documentation to the examples
804 0.01 Thurs Feb. 2, 2006