1 Revision history for Perl extension Class-MOP.
4 ~~~ some misc. doc. fixes ~~~
5 ~~ updated copyright dates ~~
7 0.50 Fri. Dec. 21, 2007
9 - fixed bug in immutable to make sure that
10 transformation arguments are saved
12 - added tests for this
14 * Class::MOP::Immutable
15 - fixed a bug (see above)
17 * Class::MOP::Attribute
20 0.49 Fri. Dec. 14, 2007
21 !! Class::MOP now loads 2 x faster !!
22 !! with XS speedups (thanks konobi) !!
25 - removed the dependency on B
26 - added two XS functions (thanks konobi)
27 - get_code_info($code) which replaces all
28 the B fiddling we were doing with
29 faster/leaner XS level fiddling
30 - check_package_cache_flag($pkg_name) which
31 returns the PL_sub_generation variable to
32 be used to help manage method caching.
35 In 5.10 or greater this will actually
36 use the mro::get_pkg_gen instead to give
37 even more accurate caching information.
38 blblack++ for that stuff :)
41 - added the &subclasses method (thanks rlb)
42 - added the update_package_cache_flag and
43 reset_package_cache_flag which help keep
44 track of when we need to re-fetch the
46 - Several small improvements to take advantage
47 of the new method map caching features
49 0.48 Mon. Nov. 26, 2007
50 * Class::MOP::Attribute
51 - fixed get_read/write_method to handle the
52 HASH ref case, which makes the
53 get_read/write_method_ref handle it too.
54 - added more tests for this
56 0.47 Sat. Nov. 24, 2007
57 * Class::MOP::Attribute
58 - fixed misspelling in get_write_method_ref
59 - added more tests for this
61 0.46 Fri. Nov. 23, 2007
63 - added the linearized_isa method instead of constantly
64 pruning duplicate classes (this will be even more
65 useful in the 5.10-compat version coming soon)
67 * Class::MOP::Attribute
68 - added the get_read_method_ref and get_write_method_ref
69 methods which allow you to retrieve a CODE ref which
70 can always be used to read or write an attribute.
72 0.45 Thurs. Nov. 13, 2007
73 * Class::MOP::Attribute
74 - Fix error message on confess (groditi)
76 0.44 Thurs. Nov. 13, 2007
77 - Apparently I didn't make dist correctly (groditi)
79 0.43 Thurs. Nov. 13, 2007
81 - Add support for the 'builder' attribute (groditi)
84 - optimise metaclass-already-exists check in
85 construct_class_instance (groditi)
86 - duplicate check into initialize to save a
87 call through (groditi)
89 * Class::MOP::Attribute
90 - Add support for the 'builder' attribute (groditi)
91 - Make predicates check for the existence of a value, not whether
92 it is defined (groditi)
94 * Class::MOP::Instance
95 - Make predicates check for the existence of a value, not whether
96 it is defined (groditi)
98 * Class::MOP::Method::Accessor
99 - made this a subclass of Class::MOP::Method::Generated
100 - removed the relevant attributes
102 * Class::MOP::Method::Constructor
103 - fixed the cached values we had to be more sane
104 - made this a subclass of Class::MOP::Method::Generated
105 - fixed generated constructor so it properly handles
107 - added tests for this
108 - added the option to allow for both inlined and
109 non-inlined constructors.
110 - Update inlined methods for builder and predicate changes (groditi)
112 * Class::MOP::Method::Generated
113 - added this class as an abstract base for the
114 Class::MOP::Method::{Constructor,Accessor} classes
115 - added tests for this
118 - Alter tests (005, 014 020, 021) for new builder addition (groditi)
119 - Tests for new predicate behavior (and corrections to old tests) (groditi)
122 - Update ArrayRef based class example to work with predicate changes
124 0.42 Mon. July 16, 2007
125 !!! Horray for mst, he fixed it !!!
127 * Class::MOP::Package
128 - alter symbol table handling to deal with 5.8.x and 5.9.x
131 - Get rid of the crappy workaround from 0.40/41
133 0.41 Sun. July 15, 2007
135 Arghh!!! My TODO test didn't work, so I handle
136 it manually now so that people can use this
137 with 5.9.5/bleadperl without issue.
139 0.40 Tues, July 3, 2007
141 ~ marked a test in 003_methods.t as TODO
142 for perl 5.9.5 (this test is irrelvant to
143 the module functioning on 5.9.5 for the most
146 0.39 Mon. June 18, 2007
147 * Class::MOP::Immutable
148 - added make_metaclass_mutable + docs (groditi)
149 - removed unused variable
150 - added create_immutable_transformer
151 necessary for sane overloading of immutable behavior
152 - tests for this (groditi)
155 - Immutability can now be undone,
156 added make_mutable + tests + docs (groditi)
157 - Massive changes to the way Immutable is done
158 for details see comments next to make_immutable
159 This fixes a bug where custom metaclasses broke
160 when made immutable. We are now keeping one immutable
161 metaclass instance per metaclass instead of just one
162 to prevent isa hierarchy corruption. Memory use will go
163 up, but I suspect it will be neglible.
164 - New tests added for this behavior. (groditi)
166 0.38 Thurs. May 31, 2007
167 ~~ More documentation updates ~~
169 * Class::MOP::Package
170 - we now deal with stub methods properly
171 - added tests for this
172 - fixed some tests failing on 5.9.5 (thanks blblack)
174 * Class::MOP::Attribute
175 - added get_read_method and get_write_method
176 thanks to groditi for this code, tests
178 - added tests and POD for this
181 - fixed RT issue #27329, clone object now
182 handles undef values correctly.
183 - added tests for this
184 - Corrected anon-class handling so that they
185 will not get reaped when instances still
186 exist which need to reference them. This is
187 the correct behavior, hopefully this is an
188 obscure enough feature that there are not too
189 many work arounds out in the wild.
190 - added tests for this by groditi
191 - updated docs to explain this
194 - load custom metaclasses automatically (thanks groditi)
195 - added tests for this behavior
197 0.37 Sat. March 10, 2007
198 ~~ Many, many documentation updates ~~
201 - added &load_class and &is_class_loaded
202 - added tests and docs for these
204 * Class::MOP::Attribute
205 - default now checks the instance with defined to
206 avoid setting off bool-overloads (found by Carl Franks)
210 - bad name in a test, causing meaningless failuress.
216 - All attribute names are now consistent and follow Perl 6
217 style (prefixed with the sigil, and ! as the twigil for
218 private attrs). This should not affect any code, unless
219 you broke encapsulation, in which case, it is your problem
222 !! Class::MOP::Class::Immutable has been removed
224 * Class::MOP::Method::Constructor
225 - this has been moved out of Class::MOP::Class::Immutable
226 and is a proper subclass of Class::MOP::Method now.
229 - this module now uses Class::MOP::Immutable for the
230 immutable transformation instead of
231 Class::MOP::Class::Immutable.
233 + Class::MOP::Immutable
234 - this module now controls the transformation from a mutable
235 to an immutable version of the class. Docs for this will
236 be coming eventually.
239 0.36 Sun. Nov. 5, 2006
241 - added a few 'no warnings' lines to keep annoying
242 (and meaningless) warnings from chirping during
246 - some more bootstrapping is now done on the new
249 * Class::MOP::Class::Immutable
251 - constructor generation is now handled by
252 the Class::MOP::Method::Constructor class
254 * Class::MOP::Method::Constructor
255 - created this to handle constructor generation
256 in Class::MOP::Class::Immutable
258 * Class::MOP::Attribute
260 - attributes now delegate to the
261 Class::MOP::Method::Accessor to generate
264 * Class::MOP::Method::Accessor
265 - all accessor generation functions from
266 Class::MOP::Attribute have been moved here
268 0.35 Sat. Sept. 30, 2006
270 * scripts/class_browser.pl
271 - initial prototype of a class browser, more
272 on this to come. Comments and patches are
276 - All Class::MOP::* accessors are no longer
277 re-generated in the bootstrap, instead
278 they are aliased from the originals
279 - fixed tests to reflect
280 - added Class::MOP::Method (and its subclasses)
282 - adjusted tests for this
283 - added the Class::MOP::Instance attributes
288 - methods are no longer blessed CODE refs
289 but are actual objects which can be CODE-ified
290 - adjusted tests to compensate
291 - adjusted docs for this
294 - changed how methods are dealt with to
295 encapsulate most of the work into the
296 &get_method_map method
297 - made several adjustments for the change
298 in Class::MOP::Method
299 - &add_attribute now checks if you are adding
300 a duplicate name, and properly removes the
301 old one before installing the new one
302 - added tests for this
303 - adjusted docs for this
305 * Class::MOP::Class::Immutable
306 - added caching of &get_method_map
307 - fixed issue with &get_package_symbol
308 - cleaned up the methods that die (patch by David Wheeler)
310 * Class::MOP::Package
311 - added filtering capabilities to
312 &list_all_package_symbols
314 0.34 Sat. Aug. 26, 2006
316 - added the %:methods attribute, which like
317 the $:version and such just actually goes
318 to the symbol table to get it's stuff.
319 However, it makes the MOP more complete.
321 - The &create method now requires that all
322 but the package name now is passed in as
323 named parameters. See docs for more info.
324 - updated docs and tests for this
327 - added &dump method to easily Data::Dumper
331 - cleaned up the initialization of attributes
332 which do not store things in the instance
333 - added the %:methods attribute definition to
336 ~ lots of misc. test cleanup
338 0.33 Sat. Aug. 19, 2006
340 - moved the metaclass cache out of here
341 and it is now in Class::MOP itself.
344 - moved all the metaclass cache stuff here
345 - fixed all tests for this
347 * Class::MOP::Attribute
348 - reference values (other than CODE refs)
349 are no longer allowed for defaults
350 - added tests for this
352 * Class::MOP::Package
353 - fixed an issue with perl 5.8.1 and how it deals
354 with symbol tables. The namespace hash is now
355 always reloaded from the symbol table.
357 ~ lots of misc. documentation cleanup
359 0.32 Sat. Aug. 12, 2006
360 + added Class::MOP::Object so that the
361 metamodel is more complete (and closer
362 to what Perl 6 will probably be).
364 * Class::MOP::Package
365 - refactored entire class, this is now
366 the primary gateway between the metaclass
367 and the Perl 5 symbol table
368 - added many tests for this
369 - this class is now a subclass of
371 - added some tests to reflect this
374 - refactored all symbol table access to
375 use Class::MOP::Package methods instead
378 - adding the $:version attribute in the bootstrap
379 so that Module has a version as an attribute
380 - see comment in Class::MOP for details
381 - added the $:authority attribute to this module
382 as well as an &identifier method, to bring us
383 ever closer to Perl 6 goodness
384 - I have added $AUTHORITY to all the modules
385 - added tests for this
387 * Class::MOP::Instance
388 - added &deinitialize_slot for removing slots
390 - added tests for this
392 * Class::MOP::Attribute
393 - added support for &deinitialize_slot for removing
394 slots from an instance
395 - added tests for this
397 0.31 Sat. July 15, 2006
400 - added &find_method_by_name to locate a method
401 anywhere within the class hierarchy
403 * Class::MOP::Attribute
404 - added &set_value and &get_value for getting
405 the value of the attribute for a particular
408 0.30 Wed. July 5, 2006
409 ---------------------------------------
410 This is the first version of Class::MOP
411 to introduce the immutable features which
412 will be used for optimizating the MOP.
413 This support should still be considered
414 experimental, but moving towards stability.
415 ---------------------------------------
417 * Created Class::MOP::Class::Immutable
419 * Created the Class::MOP::Package and
420 Class::MOP::Module classes to more
421 closely conform to Perl 6's meta-model
424 - now inherits from Class::MOP::Module
425 - several methods moved to ::Module and
426 ::Package and now inherited
427 - added tests for this
429 * Class::MOP::Instance
430 - added an is_inlinable method to allow other
431 classes to check before they attempt to optimize.
432 - added an inline_create_instance to inline
433 instance creation (of course)
436 - the Class::MOP::Class::*_package_variable
437 methods are all now methods of Class::MOP::Package
438 and called *_package_symbol instead. This is
439 because they are now more general purpose symbol
440 table manipulation methods.
442 0.29_02 Thurs. June 22, 2006
443 ++ DEVELOPER RELEASE ++
445 - small change in &create so that it behaves
446 properly when inherited
447 - small fix to &clone_instance
449 0.29_01 Fri. May 12, 2006
450 ++ DEVELOPER RELEASE ++
451 - This release works in combination with
452 Moose 0.09_01, it is a developer release
453 because it introduces a new instance
454 sub-protocol and has not yet been
458 - anon-classes are now properly garbage collected
459 - added tests for this
460 - improved method modifier wrapping
462 * Class::MOP::Instance
463 - added new instance protocol
464 - added tests for this
465 - changed all relevant modules and examples
467 - Class::MOP::Attribute
471 - you no longer need to specify the metaclass
472 itself, if it is not there, Class::MOP::Class
474 - updated tests for this
477 - added ArrayBasedStorage example to show
478 instance storage using ARRAY refs instead of
480 - added tests for this
481 - InsideOutClass is totally revised using the
482 new instance protocol
483 - added more tests for this
485 0.26 Mon. April 24, 2006
487 - added find_attribute_by_name method
488 - added tests and docs for this
489 - some small optimizations
491 * Class::MOP::Attribute
492 - some small optimizations
494 0.25 Thurs. April 20, 2006
496 - added create_anon_class for creating anonymous classes
497 - added tests for this
498 - added get_all_metaclasses, get_all_metaclass_names
499 and get_all_metaclass_instances method to allow
500 access to all the cached metaclass objects.
501 - attribute slot initialization is now the responsibility
502 of the attribute itself, and construct_instance now
503 delegates appropriately
505 * Class::MOP::Attribute
506 - attribute slot initialization is now the responsibility
507 of the attribute itself, so we added a method for it
508 called initialize_instance_slot
511 - adjusted all the examples to use the new attribute
512 initialize_instance_slot method
514 0.24 Tues. April 11, 2006
516 - cleaned up how the before/after/around method
517 modifiers get named with Sub::Name
519 0.23 Thurs. March 30, 2006
521 - fixed the way attribute defaults are handled
522 during instance construction (bug found by chansen)
524 * Class::MOP::Attribute
525 - read-only accessors ('reader') will now die if
526 passed more than one argument (attempting to write
528 - added tests for this
529 - adjusted all /example files to comply
531 0.22 Mon. March 20, 2006
533 - localized $@ in the *_package_variable functions
534 because otherwise, it does ugly things in Moose.
535 - added test case for this
537 0.21 Wed. March 15, 2006
539 - fixed issue where metaclasses are reaped from
540 our cache in global destruction, and so are not
541 available in DESTORY calls
543 0.20 Thurs. March 2, 2006
544 - removed the dependency for Clone since
545 we no longer to deep-cloning by default.
548 - added &package_name, &name and
549 &fully_qualified_name methods, some of
550 which were formerly private subs in
553 * Class::MOP::Method::Wrapped
554 - allows for a method to be wrapped with
555 before, after and around modifiers
556 - added tests and docs for this feature
559 - improved &get_package_symbol
560 - &version and &superclasses now use it
561 - methods are now blessed into Class::MOP::Method
563 - added methods to install CLOS-style method modifiers
564 - &add_before_method_modifier
565 - &add_after_method_modifier
566 - &add_around_method_modifier
567 - added tests and docs for these
568 - added &find_next_method_by_name which finds the
569 equivalent of SUPER::method_name
571 0.12 Thurs. Feb 23, 2006
572 - reduced the dependency on B, no need to always
576 - added docs to the C3 method dispatch order test
577 - fixed missing Algorithm::C3 dependency by making
578 the test skip if it is not installed
580 0.11 Mon Feb. 20, 2006
582 - added example of changing method dispatch order to C3
585 - changed how clone_instance behaves, it now only does a
586 shallow clone (see docs for more details)
587 - added docs and tests
589 0.10 Tues Feb. 14, 2006
590 ** This release was mostly about writing more tests and
591 cleaning out old and dusty code, the MOP should now
592 be considered "ready to use".
594 - adding more tests to get coverage up a little higher,
595 mostly testing errors and edge cases.
596 - test coverage is now at 99%
599 - no longer optionally exports to UNIVERSAL::meta or
600 creates a custom metaclass generator, use the
601 metaclass pragma instead.
604 - fixed a number of minor issues which came up in the
605 error/edge-case tests
607 * Class::MOP::Attribute
608 - fixed a number of minor issues which came up in the
609 error/edge-case tests
612 - fixing the AttributesWithHistory example, it was broken.
614 0.06 Thurs Feb. 9, 2006
616 - adding new metaclass pragma to make setting up the
617 metaclass a little more straightforward
620 - clean up bootstrapping to include more complete
621 attribute definitions for Class::MOP::Class and
622 Class::MOP::Attribute (accessors, readers, writers,
623 etc.) ... it is redundant, but is useful meta-info
627 - fixing minor meta-circularity issue with &meta, it
628 is now more useful for subclasses
629 - added &get_attribute_map as an accessor for the
630 hash of attribute meta objects
631 - &compute_all_applicable_attributes now just returns
632 the attribute meta-object, rather than the HASH ref
633 since all the same info can be gotten from the
634 attribute meta-object itself
635 - updated docs & tests to reflect
636 - added &clone_instance method which does a deep clone
637 of the instance structure created by &construct_instance
638 - added docs & tests for this
639 - added Clone as a dependency
640 - added &new_object and &clone_object convience methods to
641 return blessed new or cloned instances
642 - they handle Class::MOP::Class singletons correctly too
643 - added docs & tests for this
644 - cleaned up the &constuct_class_instance so that it behaves
645 more like &construct_instance (and managed the singletons too)
646 - added the &check_metaclass_compatibility method to make sure
647 that metaclasses are upward and downward compatible.
648 - added tests and docs for this
651 - adjusting code to use the &Class::MOP::Class::meta
653 - adjusting code to use the metaclass pragma
655 0.05 Sat Feb. 4, 2006
657 - added the &attribute_metaclass and &method_metaclass
658 attributes which contain a metaclass name to use for
659 attributes/methods respectively
662 - bootstrap additional attributes for Class::MOP::Class
665 - adjusted the example code and tests to use the new
666 &attribute_metaclass feature of Class::MOP::Class
670 0.04 Fri Feb. 3, 2006
672 - some documentation suggestions from #perl6
674 * Class::MOP::Attribute
675 - improved error messages
678 - added new examples:
679 - AttributesWithHistory
680 - ClassEncapsultedAttributes
682 0.03 Fri Feb. 3, 2006
683 - converted to Module::Build instead of EU::MM
685 * Class::MOP::Attribute
686 - refactored method generation code
687 - attributes are now associated with class directly
690 - refactored the InsideOut example to take advantage
691 of the Class::MOP::Attribute refactoring
692 - changed example files to .pod files and hide thier
693 package names from PAUSE (I don't want to own these
694 namespaces really, they are just examples)
696 0.02 Thurs Feb. 2, 2006
697 - moving examples from t/lib/* to examples/*
698 - adding POD documentation to the examples
700 0.01 Thurs Feb. 2, 2006