1 Revision history for Perl extension Class-MOP.
5 - made get_method_map use list_all_package_symbols
6 instead of manually grabbing each symbol
9 - made {get, has}_package_symbol not call
11 - added get_all_package_symbols to fetch
12 a HASH of items based on a type filter
13 similar to list_all_package_symbols
14 - added tests for this
17 Class::MOP::Method::Constructor
18 Class::MOP::Method::Generated
19 Class::MOP::Method::Accessor
20 - added more descriptive error message to help
21 keep people from wasting time tracking an error
22 that is easily fixed by upgrading. -
24 0.56 Saturday, May 24, 2008
26 - we now get the &check_package_cache_flag
27 function from MRO::Compat
28 - All XS based functionality now has a
30 - the CLASS_MOP_NO_XS environment variable
31 can now be used to force non-XS versions
34 * Class::MOP::Attribute
35 - add has_read_method and has_write_method
36 - get_{read,write}_method_ref now wraps the
37 anon-sub ref in the method metaclass when
39 - added tests for this
41 * Class::MOP::Immutable
42 - added the ability to "wrap" methods when
43 making the class immutable
46 - now handling the edge case of ->meta->identifier
47 dying by wrapping add_package_symbol to specifically
49 - added tests for this
51 * Class::MOP::Attribute
54 - any time a method meta object is constructed
55 we make sure to pass the correct package and
56 method name information
59 Class::MOP::Method::Wrapped
60 Class::MOP::Method::Generated
61 Class::MOP::Method::Accessor
62 Class::MOP::Method::Consructor
63 - the &wrap constructor method now requires that a
64 'package_name' and 'name' attribute are passed. This
65 is to help support the no-XS version, and will
66 throw an error if these are not supplied.
67 - all these classes are now bootstrapped properly
68 and now store the package_name and name attributes
71 ~ Build.PL has been removed since the
72 Module::Install support has been removed
74 0.55 Mon. April 28, 2008
75 - All classes now have proper C3 MRO support
76 - added MRO::Compat as a dependency to allow
77 for the C3 MRO support to Just Work in all
81 - rebless_instance now returns the instance
82 it has just blessed, this is mostly to
84 - set the attr correctly in rebless_instance
85 when it has no init_arg
86 - tweaked &linear_isa and &class_precedence_list
87 to support c3 classes.
89 0.54 Fri. March, 14, 2008
92 - making sure that load_class never gets
93 passed a value from @_ or $_ to squash
94 Ovid's bug (http://use.perl.org/~Ovid/journal/35763)
97 - make_{immutable,mutable} now return 1
99 - improved error handling in ->create method
100 - rebless_instance now takes extra params which
101 will be used to populate values
102 - added tests for this
105 - localizing the Data::Dumper configurations so
106 that it does not pollute others (RT #33509)
112 Class::MOP::Attribute
113 - these classes no longer define their own ->meta,
114 but instead just inherit from Class::MOP::Object
116 * Class::MOP::Instance
117 Class::MOP::Immutable
118 - these classes now inherit from Class::MOP::Object
121 - fixed the filename length on several
122 test files so we install on VMS better
124 - fixed incorrect use of catdir when it
125 should be catfile (RT #32385)
127 0.53 Thurs. Feb. 14, 1008
128 ~~ several doc. fixes and updates ~~
131 Class::MOP::Method::Constructor
132 Class::MOP::Attribute
133 - making init_arg accept an undefined value
134 to indicate that no constructor args can
135 be passed (thanks to nothingmuch)
136 - added tests for this
137 - added attribute initializer attribute (rjbs)
140 - making this use the new init_arg => undef
141 feature instead of the silly hack from
142 before (thanks to nothingmuch)
144 0.52 Tues. Jan. 22, 2008
146 - fixed bug in rebless_instance
149 * Class::MOP::Method::Constructor
150 - removed assumptions about the existence of
153 0.51 Mon. Jan. 14, 2008
154 ~~~ some misc. doc. fixes ~~~
155 ~~ updated copyright dates ~~
158 - now sets the IS_RUNNING_ON_5_10
159 constant so that we can take advantage
160 of some of the nice bits of 5.10
163 - uses the IS_RUNNING_ON_5_10 flag to
164 optimize the &linearized_isa method
165 and avoid the hack/check for circular
166 inheritence in &class_precedence_list
167 - added rebless_instance method (Sartak)
168 - added tests for this
170 * Class::MOP::Immutable
171 - the immutable class now keeps track of
172 the transformer which immutablized it
174 * Class::MOP::Instance
175 - added rebless_instance_structure method (Sartak)
176 - added tests for this
178 0.50 Fri. Dec. 21, 2007
180 - fixed bug in immutable to make sure that
181 transformation arguments are saved
183 - added tests for this
185 * Class::MOP::Immutable
186 - fixed a bug (see above)
188 * Class::MOP::Attribute
191 0.49 Fri. Dec. 14, 2007
192 !! Class::MOP now loads 2 x faster !!
193 !! with XS speedups (thanks konobi) !!
196 - removed the dependency on B
197 - added two XS functions (thanks konobi)
198 - get_code_info($code) which replaces all
199 the B fiddling we were doing with
200 faster/leaner XS level fiddling
201 - check_package_cache_flag($pkg_name) which
202 returns the PL_sub_generation variable to
203 be used to help manage method caching.
206 In 5.10 or greater this will actually
207 use the mro::get_pkg_gen instead to give
208 even more accurate caching information.
209 blblack++ for that stuff :)
212 - added the &subclasses method (thanks rlb)
213 - added the update_package_cache_flag and
214 reset_package_cache_flag which help keep
215 track of when we need to re-fetch the
217 - Several small improvements to take advantage
218 of the new method map caching features
220 0.48 Mon. Nov. 26, 2007
221 * Class::MOP::Attribute
222 - fixed get_read/write_method to handle the
223 HASH ref case, which makes the
224 get_read/write_method_ref handle it too.
225 - added more tests for this
227 0.47 Sat. Nov. 24, 2007
228 * Class::MOP::Attribute
229 - fixed misspelling in get_write_method_ref
230 - added more tests for this
232 0.46 Fri. Nov. 23, 2007
234 - added the linearized_isa method instead of constantly
235 pruning duplicate classes (this will be even more
236 useful in the 5.10-compat version coming soon)
238 * Class::MOP::Attribute
239 - added the get_read_method_ref and get_write_method_ref
240 methods which allow you to retrieve a CODE ref which
241 can always be used to read or write an attribute.
243 0.45 Thurs. Nov. 13, 2007
244 * Class::MOP::Attribute
245 - Fix error message on confess (groditi)
247 0.44 Thurs. Nov. 13, 2007
248 - Apparently I didn't make dist correctly (groditi)
250 0.43 Thurs. Nov. 13, 2007
252 - Add support for the 'builder' attribute (groditi)
255 - optimise metaclass-already-exists check in
256 construct_class_instance (groditi)
257 - duplicate check into initialize to save a
258 call through (groditi)
260 * Class::MOP::Attribute
261 - Add support for the 'builder' attribute (groditi)
262 - Make predicates check for the existence of a value, not whether
263 it is defined (groditi)
265 * Class::MOP::Instance
266 - Make predicates check for the existence of a value, not whether
267 it is defined (groditi)
269 * Class::MOP::Method::Accessor
270 - made this a subclass of Class::MOP::Method::Generated
271 - removed the relevant attributes
273 * Class::MOP::Method::Constructor
274 - fixed the cached values we had to be more sane
275 - made this a subclass of Class::MOP::Method::Generated
276 - fixed generated constructor so it properly handles
278 - added tests for this
279 - added the option to allow for both inlined and
280 non-inlined constructors.
281 - Update inlined methods for builder and predicate changes (groditi)
283 * Class::MOP::Method::Generated
284 - added this class as an abstract base for the
285 Class::MOP::Method::{Constructor,Accessor} classes
286 - added tests for this
289 - Alter tests (005, 014 020, 021) for new builder addition (groditi)
290 - Tests for new predicate behavior (and corrections to old tests) (groditi)
293 - Update ArrayRef based class example to work with predicate changes
295 0.42 Mon. July 16, 2007
296 !!! Horray for mst, he fixed it !!!
298 * Class::MOP::Package
299 - alter symbol table handling to deal with 5.8.x and 5.9.x
302 - Get rid of the crappy workaround from 0.40/41
304 0.41 Sun. July 15, 2007
306 Arghh!!! My TODO test didn't work, so I handle
307 it manually now so that people can use this
308 with 5.9.5/bleadperl without issue.
310 0.40 Tues, July 3, 2007
312 ~ marked a test in 003_methods.t as TODO
313 for perl 5.9.5 (this test is irrelvant to
314 the module functioning on 5.9.5 for the most
317 0.39 Mon. June 18, 2007
318 * Class::MOP::Immutable
319 - added make_metaclass_mutable + docs (groditi)
320 - removed unused variable
321 - added create_immutable_transformer
322 necessary for sane overloading of immutable behavior
323 - tests for this (groditi)
326 - Immutability can now be undone,
327 added make_mutable + tests + docs (groditi)
328 - Massive changes to the way Immutable is done
329 for details see comments next to make_immutable
330 This fixes a bug where custom metaclasses broke
331 when made immutable. We are now keeping one immutable
332 metaclass instance per metaclass instead of just one
333 to prevent isa hierarchy corruption. Memory use will go
334 up, but I suspect it will be neglible.
335 - New tests added for this behavior. (groditi)
337 0.38 Thurs. May 31, 2007
338 ~~ More documentation updates ~~
340 * Class::MOP::Package
341 - we now deal with stub methods properly
342 - added tests for this
343 - fixed some tests failing on 5.9.5 (thanks blblack)
345 * Class::MOP::Attribute
346 - added get_read_method and get_write_method
347 thanks to groditi for this code, tests
349 - added tests and POD for this
352 - fixed RT issue #27329, clone object now
353 handles undef values correctly.
354 - added tests for this
355 - Corrected anon-class handling so that they
356 will not get reaped when instances still
357 exist which need to reference them. This is
358 the correct behavior, hopefully this is an
359 obscure enough feature that there are not too
360 many work arounds out in the wild.
361 - added tests for this by groditi
362 - updated docs to explain this
365 - load custom metaclasses automatically (thanks groditi)
366 - added tests for this behavior
368 0.37 Sat. March 10, 2007
369 ~~ Many, many documentation updates ~~
372 - added &load_class and &is_class_loaded
373 - added tests and docs for these
375 * Class::MOP::Attribute
376 - default now checks the instance with defined to
377 avoid setting off bool-overloads (found by Carl Franks)
381 - bad name in a test, causing meaningless failuress.
387 - All attribute names are now consistent and follow Perl 6
388 style (prefixed with the sigil, and ! as the twigil for
389 private attrs). This should not affect any code, unless
390 you broke encapsulation, in which case, it is your problem
393 !! Class::MOP::Class::Immutable has been removed
395 * Class::MOP::Method::Constructor
396 - this has been moved out of Class::MOP::Class::Immutable
397 and is a proper subclass of Class::MOP::Method now.
400 - this module now uses Class::MOP::Immutable for the
401 immutable transformation instead of
402 Class::MOP::Class::Immutable.
404 + Class::MOP::Immutable
405 - this module now controls the transformation from a mutable
406 to an immutable version of the class. Docs for this will
407 be coming eventually.
410 0.36 Sun. Nov. 5, 2006
412 - added a few 'no warnings' lines to keep annoying
413 (and meaningless) warnings from chirping during
417 - some more bootstrapping is now done on the new
420 * Class::MOP::Class::Immutable
422 - constructor generation is now handled by
423 the Class::MOP::Method::Constructor class
425 * Class::MOP::Method::Constructor
426 - created this to handle constructor generation
427 in Class::MOP::Class::Immutable
429 * Class::MOP::Attribute
431 - attributes now delegate to the
432 Class::MOP::Method::Accessor to generate
435 * Class::MOP::Method::Accessor
436 - all accessor generation functions from
437 Class::MOP::Attribute have been moved here
439 0.35 Sat. Sept. 30, 2006
441 * scripts/class_browser.pl
442 - initial prototype of a class browser, more
443 on this to come. Comments and patches are
447 - All Class::MOP::* accessors are no longer
448 re-generated in the bootstrap, instead
449 they are aliased from the originals
450 - fixed tests to reflect
451 - added Class::MOP::Method (and its subclasses)
453 - adjusted tests for this
454 - added the Class::MOP::Instance attributes
459 - methods are no longer blessed CODE refs
460 but are actual objects which can be CODE-ified
461 - adjusted tests to compensate
462 - adjusted docs for this
465 - changed how methods are dealt with to
466 encapsulate most of the work into the
467 &get_method_map method
468 - made several adjustments for the change
469 in Class::MOP::Method
470 - &add_attribute now checks if you are adding
471 a duplicate name, and properly removes the
472 old one before installing the new one
473 - added tests for this
474 - adjusted docs for this
476 * Class::MOP::Class::Immutable
477 - added caching of &get_method_map
478 - fixed issue with &get_package_symbol
479 - cleaned up the methods that die (patch by David Wheeler)
481 * Class::MOP::Package
482 - added filtering capabilities to
483 &list_all_package_symbols
485 0.34 Sat. Aug. 26, 2006
487 - added the %:methods attribute, which like
488 the $:version and such just actually goes
489 to the symbol table to get it's stuff.
490 However, it makes the MOP more complete.
492 - The &create method now requires that all
493 but the package name now is passed in as
494 named parameters. See docs for more info.
495 - updated docs and tests for this
498 - added &dump method to easily Data::Dumper
502 - cleaned up the initialization of attributes
503 which do not store things in the instance
504 - added the %:methods attribute definition to
507 ~ lots of misc. test cleanup
509 0.33 Sat. Aug. 19, 2006
511 - moved the metaclass cache out of here
512 and it is now in Class::MOP itself.
515 - moved all the metaclass cache stuff here
516 - fixed all tests for this
518 * Class::MOP::Attribute
519 - reference values (other than CODE refs)
520 are no longer allowed for defaults
521 - added tests for this
523 * Class::MOP::Package
524 - fixed an issue with perl 5.8.1 and how it deals
525 with symbol tables. The namespace hash is now
526 always reloaded from the symbol table.
528 ~ lots of misc. documentation cleanup
530 0.32 Sat. Aug. 12, 2006
531 + added Class::MOP::Object so that the
532 metamodel is more complete (and closer
533 to what Perl 6 will probably be).
535 * Class::MOP::Package
536 - refactored entire class, this is now
537 the primary gateway between the metaclass
538 and the Perl 5 symbol table
539 - added many tests for this
540 - this class is now a subclass of
542 - added some tests to reflect this
545 - refactored all symbol table access to
546 use Class::MOP::Package methods instead
549 - adding the $:version attribute in the bootstrap
550 so that Module has a version as an attribute
551 - see comment in Class::MOP for details
552 - added the $:authority attribute to this module
553 as well as an &identifier method, to bring us
554 ever closer to Perl 6 goodness
555 - I have added $AUTHORITY to all the modules
556 - added tests for this
558 * Class::MOP::Instance
559 - added &deinitialize_slot for removing slots
561 - added tests for this
563 * Class::MOP::Attribute
564 - added support for &deinitialize_slot for removing
565 slots from an instance
566 - added tests for this
568 0.31 Sat. July 15, 2006
571 - added &find_method_by_name to locate a method
572 anywhere within the class hierarchy
574 * Class::MOP::Attribute
575 - added &set_value and &get_value for getting
576 the value of the attribute for a particular
579 0.30 Wed. July 5, 2006
580 ---------------------------------------
581 This is the first version of Class::MOP
582 to introduce the immutable features which
583 will be used for optimizating the MOP.
584 This support should still be considered
585 experimental, but moving towards stability.
586 ---------------------------------------
588 * Created Class::MOP::Class::Immutable
590 * Created the Class::MOP::Package and
591 Class::MOP::Module classes to more
592 closely conform to Perl 6's meta-model
595 - now inherits from Class::MOP::Module
596 - several methods moved to ::Module and
597 ::Package and now inherited
598 - added tests for this
600 * Class::MOP::Instance
601 - added an is_inlinable method to allow other
602 classes to check before they attempt to optimize.
603 - added an inline_create_instance to inline
604 instance creation (of course)
607 - the Class::MOP::Class::*_package_variable
608 methods are all now methods of Class::MOP::Package
609 and called *_package_symbol instead. This is
610 because they are now more general purpose symbol
611 table manipulation methods.
613 0.29_02 Thurs. June 22, 2006
614 ++ DEVELOPER RELEASE ++
616 - small change in &create so that it behaves
617 properly when inherited
618 - small fix to &clone_instance
620 0.29_01 Fri. May 12, 2006
621 ++ DEVELOPER RELEASE ++
622 - This release works in combination with
623 Moose 0.09_01, it is a developer release
624 because it introduces a new instance
625 sub-protocol and has not yet been
629 - anon-classes are now properly garbage collected
630 - added tests for this
631 - improved method modifier wrapping
633 * Class::MOP::Instance
634 - added new instance protocol
635 - added tests for this
636 - changed all relevant modules and examples
638 - Class::MOP::Attribute
642 - you no longer need to specify the metaclass
643 itself, if it is not there, Class::MOP::Class
645 - updated tests for this
648 - added ArrayBasedStorage example to show
649 instance storage using ARRAY refs instead of
651 - added tests for this
652 - InsideOutClass is totally revised using the
653 new instance protocol
654 - added more tests for this
656 0.26 Mon. April 24, 2006
658 - added find_attribute_by_name method
659 - added tests and docs for this
660 - some small optimizations
662 * Class::MOP::Attribute
663 - some small optimizations
665 0.25 Thurs. April 20, 2006
667 - added create_anon_class for creating anonymous classes
668 - added tests for this
669 - added get_all_metaclasses, get_all_metaclass_names
670 and get_all_metaclass_instances method to allow
671 access to all the cached metaclass objects.
672 - attribute slot initialization is now the responsibility
673 of the attribute itself, and construct_instance now
674 delegates appropriately
676 * Class::MOP::Attribute
677 - attribute slot initialization is now the responsibility
678 of the attribute itself, so we added a method for it
679 called initialize_instance_slot
682 - adjusted all the examples to use the new attribute
683 initialize_instance_slot method
685 0.24 Tues. April 11, 2006
687 - cleaned up how the before/after/around method
688 modifiers get named with Sub::Name
690 0.23 Thurs. March 30, 2006
692 - fixed the way attribute defaults are handled
693 during instance construction (bug found by chansen)
695 * Class::MOP::Attribute
696 - read-only accessors ('reader') will now die if
697 passed more than one argument (attempting to write
699 - added tests for this
700 - adjusted all /example files to comply
702 0.22 Mon. March 20, 2006
704 - localized $@ in the *_package_variable functions
705 because otherwise, it does ugly things in Moose.
706 - added test case for this
708 0.21 Wed. March 15, 2006
710 - fixed issue where metaclasses are reaped from
711 our cache in global destruction, and so are not
712 available in DESTORY calls
714 0.20 Thurs. March 2, 2006
715 - removed the dependency for Clone since
716 we no longer to deep-cloning by default.
719 - added &package_name, &name and
720 &fully_qualified_name methods, some of
721 which were formerly private subs in
724 * Class::MOP::Method::Wrapped
725 - allows for a method to be wrapped with
726 before, after and around modifiers
727 - added tests and docs for this feature
730 - improved &get_package_symbol
731 - &version and &superclasses now use it
732 - methods are now blessed into Class::MOP::Method
734 - added methods to install CLOS-style method modifiers
735 - &add_before_method_modifier
736 - &add_after_method_modifier
737 - &add_around_method_modifier
738 - added tests and docs for these
739 - added &find_next_method_by_name which finds the
740 equivalent of SUPER::method_name
742 0.12 Thurs. Feb 23, 2006
743 - reduced the dependency on B, no need to always
747 - added docs to the C3 method dispatch order test
748 - fixed missing Algorithm::C3 dependency by making
749 the test skip if it is not installed
751 0.11 Mon Feb. 20, 2006
753 - added example of changing method dispatch order to C3
756 - changed how clone_instance behaves, it now only does a
757 shallow clone (see docs for more details)
758 - added docs and tests
760 0.10 Tues Feb. 14, 2006
761 ** This release was mostly about writing more tests and
762 cleaning out old and dusty code, the MOP should now
763 be considered "ready to use".
765 - adding more tests to get coverage up a little higher,
766 mostly testing errors and edge cases.
767 - test coverage is now at 99%
770 - no longer optionally exports to UNIVERSAL::meta or
771 creates a custom metaclass generator, use the
772 metaclass pragma instead.
775 - fixed a number of minor issues which came up in the
776 error/edge-case tests
778 * Class::MOP::Attribute
779 - fixed a number of minor issues which came up in the
780 error/edge-case tests
783 - fixing the AttributesWithHistory example, it was broken.
785 0.06 Thurs Feb. 9, 2006
787 - adding new metaclass pragma to make setting up the
788 metaclass a little more straightforward
791 - clean up bootstrapping to include more complete
792 attribute definitions for Class::MOP::Class and
793 Class::MOP::Attribute (accessors, readers, writers,
794 etc.) ... it is redundant, but is useful meta-info
798 - fixing minor meta-circularity issue with &meta, it
799 is now more useful for subclasses
800 - added &get_attribute_map as an accessor for the
801 hash of attribute meta objects
802 - &compute_all_applicable_attributes now just returns
803 the attribute meta-object, rather than the HASH ref
804 since all the same info can be gotten from the
805 attribute meta-object itself
806 - updated docs & tests to reflect
807 - added &clone_instance method which does a deep clone
808 of the instance structure created by &construct_instance
809 - added docs & tests for this
810 - added Clone as a dependency
811 - added &new_object and &clone_object convience methods to
812 return blessed new or cloned instances
813 - they handle Class::MOP::Class singletons correctly too
814 - added docs & tests for this
815 - cleaned up the &constuct_class_instance so that it behaves
816 more like &construct_instance (and managed the singletons too)
817 - added the &check_metaclass_compatibility method to make sure
818 that metaclasses are upward and downward compatible.
819 - added tests and docs for this
822 - adjusting code to use the &Class::MOP::Class::meta
824 - adjusting code to use the metaclass pragma
826 0.05 Sat Feb. 4, 2006
828 - added the &attribute_metaclass and &method_metaclass
829 attributes which contain a metaclass name to use for
830 attributes/methods respectively
833 - bootstrap additional attributes for Class::MOP::Class
836 - adjusted the example code and tests to use the new
837 &attribute_metaclass feature of Class::MOP::Class
841 0.04 Fri Feb. 3, 2006
843 - some documentation suggestions from #perl6
845 * Class::MOP::Attribute
846 - improved error messages
849 - added new examples:
850 - AttributesWithHistory
851 - ClassEncapsultedAttributes
853 0.03 Fri Feb. 3, 2006
854 - converted to Module::Build instead of EU::MM
856 * Class::MOP::Attribute
857 - refactored method generation code
858 - attributes are now associated with class directly
861 - refactored the InsideOut example to take advantage
862 of the Class::MOP::Attribute refactoring
863 - changed example files to .pod files and hide thier
864 package names from PAUSE (I don't want to own these
865 namespaces really, they are just examples)
867 0.02 Thurs Feb. 2, 2006
868 - moving examples from t/lib/* to examples/*
869 - adding POD documentation to the examples
871 0.01 Thurs Feb. 2, 2006