perltidy this test file
[gitmo/Class-MOP.git] / Changes
1 Revision history for Perl extension Class-MOP.
2
3 0.77 Sat, February 14, 2009
4     * MOP.xs
5       - Avoid assertion errors on debugging perls in is_class_loaded
6         (Florian Ragwitz)
7
8     * Class::MOP
9       - Fixed various corner cases where is_class_loaded incorrectly
10         returned true for a class that wasn't really loaded. (Dave
11         Rolsky)
12
13     * Class::MOP::Class
14       - Add get_all_method_names (Sartak)
15       - Add a wrapped_method_metaclass attribute (Florian Ragwitz)
16
17     * Class::MOP::Package
18       - Disable deprecated get_all_package_symbols in list
19         context. (Florian Ragwitz)
20
21     * Makefile.PL
22       - Make sure we generate a BSD-compatible Makefile (Florian
23         Ragwitz)
24
25     * Class::MOP::Class
26       - The misspelled "check_metaclass_compatability" method we've
27         kept around for backwards compat_i_bility will be removed in a
28         near future release. You've been warned.
29
30 0.76 Thu, January 22, 2009
31     * Class::MOP::Method::Generated
32       - Added new private methods to support code generation, which
33         are being used by Moose and can be used by MooseX
34         authors. (mst)
35       - Generated methods are now generated with a #line directive
36         reflecting the source of the generated method. (nothingmuch)
37
38     * Class::MOP::Class
39       - Clarified documentation of methods that return
40         Class::MOP::Method objects. (doy)
41
42     * Class::MOP
43       - Clarified documentation of the metaclass cache methods. (Sartak)
44
45     * Tests
46       - Add test showing how the xs Class::MOP::is_class_loaded can
47         be made to operate differently to the pure perl version (t0m)
48
49 0.75 Wed, December 31, 2008
50     * Class::MOP::Class
51       - A class that was made immutable and then mutable could end up
52         sharing an immutable transformer object
53         (Class::MOP::Immutable) with other classes, leading to all
54         sorts of odd bugs. Reported by t0m. (Dave Rolsky)
55
56 0.74 Tue, December 25, 2008
57     * MOP.xs
58       - Add an xs implementation of Class::MOP::is_class_loaded (closes
59         RT#41862). Based on a patch by Goro Fuji. (Florian Ragwitz)
60       - Changed internals to make prehashing of hash keys easier and less
61         error-prone. (Florian Ragwitz)
62     * Class::MOP::Class
63       - Fix documentation to show that around modifiers happen on both
64         sides of the modified method. (Dave Rolsky)
65
66 0.73 Tue, December 16, 2008
67     * MOP.xs
68       - Don't use Perl_mro_meta_init. It's not part of the public perl
69         api. Fixes failures to build on Win32 (RT #41750).  (Florian
70         Ragwitz)
71     * t/082_get_code_info.t
72       - Add $^P &= ~0x200; (per Ovid's suggestion) in order to not
73         munger anonymous subs when under -d and so making the tests
74         succeed in that case.
75
76 0.72 Mon, December 8, 2008
77     * Class::MOP::Package
78       - Pass options to _new, so subclass' attributes can be
79         initialized (Sartak)
80     * Class::MOP::Method
81       - In the docs, indicate that package_name and name are required
82         when calling ->wrap (Stefan O'Rear)
83
84 0.71_02 Fri, December 5, 2008
85     * Class::MOP::Immutable
86       - Added a new attribute, inlined_constructor, which is true if
87         the constructor was inlined.
88     * Class::MOP::Package
89       - Make get_all_package_symbols return a hash ref in scalar
90         context and deprecate calling it in list context with a
91         warning. (Florian Ragwitz)
92     * MOP.xs
93       - Various improvements and refactoring, making things more robust and
94         easier to maintain. (Florian Ragwitz)
95
96 0.71_01 Wed, December 3, 2008
97     * Class::MOP::Method
98       - Add an "execute" method to invoke the body so
99         we can avoid using the coderef overload (Sartak)
100     * Class::MOP::Immutable
101       - When we memoize methods, get their results lazily
102         to remove some compile-time cost (Sartak)
103       - Small speedup from eliminating several method
104         calls (Sartak)
105     * Class::MOP::Class
106       - Some small internal tweaks to try to reduce the number of
107         times we call get_method_map when bootstrapping the MOP. This
108         might make loading Class::MOP (and Moose) a little
109         faster. (Dave Rolsky)
110       - Implemented an optional XS version of get_method_map. Mostly
111         taken from a patch by Goro Fuji (rt.cpan.org #41080), with
112         help form Florian Ragwitz. (Dave Rolsky)
113       - Make the behaviour of of get_all_package_symbols (and
114         therefore get_method_map) consistent for stub methods. Report
115         and test by Goro Fuji (rt.cpan.org #41255). (Florian Ragwitz)
116
117 0.71 Wed November 26, 2008
118     * Class::MOP::Class
119     * Class::MOP::Module
120       - Actual package creation has moved upward from
121         Class to Module so that Moose roles can share
122         the code (Sartak)
123
124 0.70_01 Mon, November 19, 2008
125     * Class::MOP
126       - Fixes for failures with blead (Florian Ragwitz)
127       - Silenced compiler warnings (Florian Ragwitz)
128
129 0.70 Fri, November 14, 2008
130     * Class::MOP
131       - Fixed an odd corner case where the XS version of
132         get_all_package_symbols could cause a segfault. This only
133         happened with inlined constants in Perl 5.10.0 (Florian
134         Ragwitz)
135
136 0.69 Fri, November 7, 2008
137     * Class::MOP::Method::Wrapped
138       - Added introspection methods for method modifiers (Dave Rolsky)
139
140
141 0.68 Fri October 24, 2008
142     * Class::MOP
143       - Make load_class require by file name instead of module name.
144         This stops confusing error messages when loading '__PACKAGE__'.
145         (Florian Ragwitz)
146       - Add load_one_class_of function to enable you to load one of a
147         list of classes, rather than having to call load_class multiple
148         times in an eval. (t0m)
149
150 0.67 Tue October 14, 2008
151     * Class::MOP::Class
152       - Call a method on the class after setting the superclass list
153         so that we can get Perl to detect cycles before MRO::Compat
154         spirals into an infinite loop (sartak)
155         - Reported by Schwern, [rt.cpan.org #39001]
156       - In create(), pass unused options on to initialize()
157         - added test for this
158
159 0.66 Sat September 20, 2008
160     !! This release has an incompatible change regarding !!
161        introspection of a class's method with Class::MOP::Class !!
162
163     * Tests and XS
164       - We (us maintainers) now run all tests with XS and then without
165         XS, which should help us catch skew between the XS/pure Perl
166         code. (Dave Rolsky)
167
168     * Class::MOP::Class
169       ! The alias_method method has been deprecated. It now simply
170         calls add_method instead. There is no distinction between
171         aliased methods and "real" methods.
172
173         This means that methods added via alias_method now show up as
174         part of the class's method list/map. This is a backwards
175         incompatible change, but seems unlikely to break any
176         code. Famous last words. (Dave Rolsky)
177
178     * Class::MOP::Class
179       - Fixed the spelling of "compatibility", but we still have a
180         "check_metaclass_compatability" method for backwards
181         compatibility.
182
183 0.65 Mon September 1, 2008
184     For those not following the series of dev releases, the changes
185     from 0.64 from 0.65 can mostly be summed up as a lot performance
186     improvements by nothingmuch, including new optional XS versions of
187     some methods. Also, Class::MOP now works _without_ any XS modules,
188     for sad systems without a compiler.
189
190     * Class::MOP::Method
191       - Added name and package_name XS accessors, and make sure all
192         the XS and Perl versions work the same way. (Dave Rolsky)
193
194     * MOP.xs
195       - The XS versions of various methods just returned undef when
196         called class methods, rather than dying like the pure Perl
197         versions. (Dave Rolsky)
198
199 0.64_07 Fri August 29, 2008
200     * Class::MOP
201       - Silenced warnings that managed to break Moose tests when XS
202         was loaded. (Dave Rolsky)
203       - Some XS versions of methods were ignored because of typos in
204         MOP.xs. (Dave Rolsky)
205
206 0.64_06 Mon August 25, 2008
207     * Class::MOP (MOP.xs)
208       - Another MS VC++ fix, cannot declare a variable in the middle
209         of a scope (Taro Nishino).
210
211 0.64_05 Sun August 24, 2008
212     * Class::MOP
213       - None of the dev releases actually loaded the XS properly, but
214         we silently fell back to the pure Perl version of the
215         code. (Dave Rolsky)
216
217     * Class::MOP (MOP.xs)
218       - Replaced some code that used functions not available on Visual
219         C++ with some Perl XS API bits (Dave Rolsky).
220
221 0.64_04 Sat August 23, 2008
222     * Class::MOP::Class
223       - Workaround a bug in 5.8.1's goto sub (nothingmuch)
224
225     * pod.t and pod_coveraget.t
226       - These are no longer shipped with the tarball because of bogus
227         failures from CPAN testers. (Dave Rolsky)
228
229 0.64_03 Thu August 21, 2008
230     * Class::MOP::Package
231       - Some (legit) code was misparsed by earlier 5.8.x
232         releases. (nothingmuch)
233
234     * Class::MOP
235       - Fix a constant in void context warning (nothingmuch)
236
237 0.64_02 Thu August 21, 2008
238     * Makefile.PL and Class::MOP
239       - Explicitly require Perl 5.8.0+ (Dave Rolsky)
240
241     * Makefile.PL
242       - Add missing prereqs that got lost in the switch away from
243         Module::Install.
244
245     * Class::MOP::Instance
246       - New method - get_all_attributes (nothingmuch)
247
248 0.64_01 Wed August 20, 2008
249     * Makefile.PL
250       - We now check to see if you have a compiler. If you don't, the
251         module installs without some XS bits, but will work the same
252         as with XS. This should make it easier to install on platforms
253         without a compiler (like Windows). (Dave Rolsky)
254
255     * many modules
256       - Perl 6 style attribute naming replaced with sane style ('methods', not
257         '%!methods'). These changes should not impact any existing API uses.
258         (nothingmuch).
259
260     * many modules
261       - Quite a number of optimizations based on profiling, including
262         allowing constructors to take hash references instead of
263         hashes, duplicating some frequently used code in XS, and
264         making constructors immutable. These changes should not impact
265         any existing API uses. (nothingmuch)
266
267     * Many modules
268       - Constructors now respect the meta attributes of their subclasses,
269         facilitating MOP extensibility. More related changes will happen in the
270         next several releases. (nothingmuch)
271
272     * Class::MOP::Class
273       - New method - get_all_methods, replaces the deprecated
274         compute_all_applicable_methods. get_all_attributes provided for
275         consistency (nothingmuch)
276       - New method - wrap_method was refactored out of get_method_map
277         (nothingmuch)
278       - New API for meta instance invalidation - invalidate_meta_instance,
279         invalidate_meta_instances, add_dependent_meta_instance,
280         remove_dependent_meta_instance, called automatically when attribute
281         definitions change and allows notification of dependent subclasses.
282         (nothingmuch)
283
284 0.64 Sun August 3, 2008
285     * Class::MOP::Immutable
286       - fixing subtle edge case in immutable when you
287         call ->meta (stevan)
288       - clean up option processing (nothingmuch)
289
290     * Class::MOP::Instance
291       - inlined initialize slot didn't match
292         non-inlined (nothingmuch)
293
294 0.63 Mon July 7, 2008
295     * Class::MOP
296       - load_class will initialize a metaclass even if
297         the class is already loaded (sartak)
298       - load_class now returns the metaclass instance
299         instead of just 1 (sartak)
300
301     * elsewhere
302       - better error messages (sartak and Dave Rolsky)
303
304 0.62 Wed June 18, 2008
305     - in is_class_loaded, recognize scalar references (as opposed to globs) in
306       the symbol table as methods (these are optimized constant subs)
307
308 0.61 Fri. June 13, 2008
309     - Okay, lets give this another try and see if PAUSE 
310       recognizes it correct this time.
311
312 0.60 Thurs. Jun 12, 2008
313     - Fixed a version number issue by bumping all modules
314       to 0.60.
315
316 0.59 Thurs. Jun 12, 2008
317     !! Several fixes resulting in yet another 25-30% speedup !!
318
319     * Class::MOP::Class
320       - now stores the instance of the instance 
321         metaclass to avoid needless recomputation
322         and deletes it when the cache is blown
323       - introduce methods to query Class::MOP::Class for 
324         the options used to make it immutable as well as
325         the proper immutable transformer. (groditi)        
326
327     * Class::MOP::Package
328       - {add, has, get, remove}_package_symbol all 
329         now accept a HASH ref argument as well as the
330         string. All internal usages now use the HASH
331         ref version.
332
333     * Class::MOP
334       - MOP.xs does sanity checks on the coderef 
335         to avoid a segfault
336       - is_class_loaded check now uses code that
337         was improved in Moose's ClassName type
338         check (Sartak)
339       - nonsensical (undef, empty, reference) class
340         names now throw a more direct error in
341         load_class (Sartak)
342         - tests for this and other aspects of
343           load_class (Sartak)
344     
345     * Class::MOP
346       Class::MOP::Class      
347       Class::MOP::Method
348       Class::MOP::Method::Wrapped
349       Class::MOP::Attribute
350       - switched usage of reftype to ref because 
351         it is much faster
352
353 0.58 Thurs. May 29, 2008
354     (late night release engineering)--
355     
356     - fixing the version is META.yml, no functional 
357       changes in this release
358
359 0.57 Wed. May 28, 2008
360     !! Several speedups resulting in 20-25% speedups !!
361     || (thanks to konobi, groditi, mst & CataMoose) !!
362
363     * Class::MOP::Class
364       - made get_method_map use list_all_package_symbols
365         instead of manually grabbing each symbol
366       - streamlining &initialize somewhat, since it gets
367         called so much
368         
369     * Class::MOP::Package
370       - made {get, has}_package_symbol not call 
371         &namespace so much 
372       - inlining a few calls to &name with 
373         direct HASH access key access
374       - added get_all_package_symbols to fetch 
375         a HASH of items based on a type filter
376         similar to list_all_package_symbols
377         - added tests for this
378
379     * Class::MOP::Method
380       Class::MOP::Method::Constructor
381       Class::MOP::Method::Generated
382       Class::MOP::Method::Accessor
383       - added more descriptive error message to help 
384         keep people from wasting time tracking an error
385         that is easily fixed by upgrading.
386
387     * Class::MOP::Immutable
388       - Don't inline a destructor unless the user actually
389         needs one
390         - added tests for this
391
392 0.56 Saturday, May 24, 2008
393     * Class::MOP
394       - we now get the &check_package_cache_flag
395         function from MRO::Compat
396       - All XS based functionality now has a 
397         Pure Perl alternative
398         - the CLASS_MOP_NO_XS environment variable
399           can now be used to force non-XS versions
400           to always be used
401
402     * Class::MOP::Attribute
403       - add has_read_method and has_write_method
404       - get_{read,write}_method_ref now wraps the
405         anon-sub ref in the method metaclass when
406         possible
407         - added tests for this
408
409     * Class::MOP::Immutable
410       - added the ability to "wrap" methods when
411         making the class immutable
412
413     * Class::MOP::Class
414       - now handling the edge case of ->meta->identifier
415         dying by wrapping add_package_symbol to specifically
416         allow for it to work.
417         - added tests for this
418
419     * Class::MOP::Attribute
420       Class::MOP::Class
421       Class::MOP::Immutable
422       - any time a method meta object is constructed
423         we make sure to pass the correct package and
424         method name information
425
426     * Class::MOP::Method
427       Class::MOP::Method::Wrapped
428       Class::MOP::Method::Generated
429       Class::MOP::Method::Accessor
430       Class::MOP::Method::Consructor
431       - the &wrap constructor method now requires that a 
432         'package_name' and 'name' attribute are passed. This 
433         is to help support the no-XS version, and will 
434         throw an error if these are not supplied.      
435       - all these classes are now bootstrapped properly
436         and now store the package_name and name attributes
437         correctly as well        
438
439     ~ Build.PL has been removed since the 
440       Module::Install support has been removed
441
442 0.55 Mon. April 28, 2008
443     - All classes now have proper C3 MRO support
444       - added MRO::Compat as a dependency to allow
445         for the C3 MRO support to Just Work in all
446         perl versions
447
448     * Class::MOP::Class
449       - rebless_instance now returns the instance
450         it has just blessed, this is mostly to
451         facilitate chaining
452       - set the attr correctly in rebless_instance
453         when it has no init_arg
454       - tweaked &linear_isa and &class_precedence_list
455         to support c3 classes.
456
457 0.54 Fri. March, 14, 2008
458     * Class::MOP
459       metaclass.pm
460       - making sure that load_class never gets
461         passed a value from @_ or $_ to squash
462         Ovid's bug (http://use.perl.org/~Ovid/journal/35763)
463
464     * Class::MOP::Class
465       - make_{immutable,mutable} now return 1
466         (cause Sartak asked)
467       - improved error handling in ->create method
468       - rebless_instance now takes extra params which
469         will be used to populate values
470         - added tests for this
471
472     * Class::MOP::Object
473       - localizing the Data::Dumper configurations so
474         that it does not pollute others (RT #33509)
475
476     * Class::MOP::Class
477       Class::MOP::Package
478       Class::MOP::Module
479       Class::MOP::Method
480       Class::MOP::Attribute
481       - these classes no longer define their own ->meta,
482         but instead just inherit from Class::MOP::Object
483
484     * Class::MOP::Instance
485       Class::MOP::Immutable
486       - these classes now inherit from Class::MOP::Object
487
488     * t/
489       - fixed the filename length on several
490         test files so we install on VMS better
491         (RT #32295)
492       - fixed incorrect use of catdir when it
493         should be catfile (RT #32385)
494
495 0.53 Thurs. Feb. 14, 1008
496     ~~ several doc. fixes and updates ~~
497
498     * Class::MOP::Class
499       Class::MOP::Method::Constructor
500       Class::MOP::Attribute
501         - making init_arg accept an undefined value
502           to indicate that no constructor args can
503           be passed (thanks to nothingmuch)
504           - added tests for this
505         - added attribute initializer attribute (rjbs)
506
507     * Class::MOP.
508         - making this use the new init_arg => undef
509           feature instead of the silly hack from
510           before (thanks to nothingmuch)
511
512 0.52 Tues. Jan. 22, 2008
513     * Class::MOP::Class
514       - fixed bug in rebless_instance
515         (discovered by ash)
516
517     * Class::MOP::Method::Constructor
518       - removed assumptions about the existence of
519         a &meta method
520
521 0.51 Mon. Jan. 14, 2008
522     ~~~ some misc. doc. fixes ~~~
523     ~~ updated copyright dates ~~
524
525     * Class::MOP
526       - now sets the IS_RUNNING_ON_5_10
527         constant so that we can take advantage
528         of some of the nice bits of 5.10
529
530     * Class::MOP::Class
531       - uses the IS_RUNNING_ON_5_10 flag to
532         optimize the &linearized_isa method
533         and avoid the hack/check for circular
534         inheritence in &class_precedence_list
535       - added rebless_instance method (Sartak)
536         - added tests for this
537
538     * Class::MOP::Immutable
539       - the immutable class now keeps track of
540         the transformer which immutablized it
541
542     * Class::MOP::Instance
543       - added rebless_instance_structure method (Sartak)
544         - added tests for this
545
546 0.50 Fri. Dec. 21, 2007
547     * Class::MOP::Class
548       - fixed bug in immutable to make sure that
549         transformation arguments are saved
550         correctly (mst)
551         - added tests for this
552
553     * Class::MOP::Immutable
554       - fixed a bug (see above)
555
556     * Class::MOP::Attribute
557       - some doc updates
558
559 0.49 Fri. Dec. 14, 2007
560     !! Class::MOP now loads 2 x faster  !!
561     !! with XS speedups (thanks konobi) !!
562
563     * Class::MOP
564       - removed the dependency on B
565       - added two XS functions (thanks konobi)
566         - get_code_info($code) which replaces all
567           the B fiddling we were doing with
568           faster/leaner XS level fiddling
569         - check_package_cache_flag($pkg_name) which
570           returns the PL_sub_generation variable to
571           be used to help manage method caching.
572
573           NOTE:
574           In 5.10 or greater this will actually
575           use the mro::get_pkg_gen instead to give
576           even more accurate caching information.
577           blblack++ for that stuff :)
578
579     * Class::MOP::Class
580       - added the &subclasses method (thanks rlb)
581       - added the update_package_cache_flag and
582         reset_package_cache_flag which help keep
583         track of when we need to re-fetch the
584         method map.
585       - Several small improvements to take advantage
586         of the new method map caching features
587
588 0.48 Mon. Nov. 26, 2007
589     * Class::MOP::Attribute
590       - fixed get_read/write_method to handle the
591         HASH ref case, which makes the
592         get_read/write_method_ref handle it too.
593         - added more tests for this
594
595 0.47 Sat. Nov. 24, 2007
596     * Class::MOP::Attribute
597       - fixed misspelling in get_write_method_ref
598         - added more tests for this
599
600 0.46 Fri. Nov. 23, 2007
601     * Class::MOP::Class
602       - added the linearized_isa method instead of constantly
603         pruning duplicate classes (this will be even more
604         useful in the 5.10-compat version coming soon)
605
606     * Class::MOP::Attribute
607       - added the get_read_method_ref and get_write_method_ref
608         methods which allow you to retrieve a CODE ref which
609         can always be used to read or write an attribute.
610
611 0.45 Thurs. Nov. 13, 2007
612     * Class::MOP::Attribute
613       - Fix error message on confess (groditi)
614
615 0.44 Thurs. Nov. 13, 2007
616     - Apparently I didn't make dist correctly (groditi)
617
618 0.43 Thurs. Nov. 13, 2007
619     * Class::MOP
620       - Add support for the 'builder' attribute (groditi)
621
622     * Class::MOP::Class
623       - optimise metaclass-already-exists check in
624         construct_class_instance (groditi)
625       - duplicate check into initialize to save a
626         call through (groditi)
627
628     * Class::MOP::Attribute
629       - Add support for the 'builder' attribute (groditi)
630       - Make predicates check for the existence of a value, not whether
631         it is defined (groditi)
632
633     * Class::MOP::Instance
634       - Make predicates check for the existence of a value, not whether
635         it is defined (groditi)
636
637     * Class::MOP::Method::Accessor
638       - made this a subclass of Class::MOP::Method::Generated
639         - removed the relevant attributes
640
641     * Class::MOP::Method::Constructor
642       - fixed the cached values we had to be more sane
643       - made this a subclass of Class::MOP::Method::Generated
644       - fixed generated constructor so it properly handles
645         subclasses now.
646         - added tests for this
647       - added the option to allow for both inlined and
648         non-inlined constructors.
649       - Update inlined methods for builder and predicate changes (groditi)
650
651     * Class::MOP::Method::Generated
652       - added this class as an abstract base for the
653         Class::MOP::Method::{Constructor,Accessor} classes
654         - added tests for this
655
656     *t/
657       - Alter tests (005, 014 020, 021) for new builder addition (groditi)
658       - Tests for new predicate behavior (and corrections to old tests) (groditi)
659
660     *examples/
661       - Update ArrayRef based class example to work with predicate changes
662
663 0.42 Mon. July 16, 2007
664     !!! Horray for mst, he fixed it !!!
665
666     * Class::MOP::Package
667       - alter symbol table handling to deal with 5.8.x and 5.9.x
668
669     * t/
670       - Get rid of the crappy workaround from 0.40/41
671
672 0.41 Sun. July 15, 2007
673     * t/
674         Arghh!!! My TODO test didn't work, so I handle
675         it manually now so that people can use this
676         with 5.9.5/bleadperl without issue.
677
678 0.40 Tues, July 3, 2007
679     * t/
680       ~ marked a test in 003_methods.t as TODO
681         for perl 5.9.5 (this test is irrelvant to
682         the module functioning on 5.9.5 for the most
683         part anyway)
684
685 0.39 Mon. June 18, 2007
686     * Class::MOP::Immutable
687       - added make_metaclass_mutable + docs (groditi)
688       - removed unused variable
689       - added create_immutable_transformer
690         necessary for sane overloading of immutable behavior
691          - tests for this (groditi)
692
693     * Class::MOP::Class
694       - Immutability can now be undone,
695         added make_mutable + tests + docs (groditi)
696       - Massive changes to the way Immutable is done
697         for details see comments next to make_immutable
698         This fixes a bug where custom metaclasses broke
699         when made immutable. We are now keeping one immutable
700         metaclass instance per metaclass instead of just one
701         to prevent isa hierarchy corruption. Memory use will go
702         up, but I suspect it will be neglible.
703          - New tests added for this behavior.  (groditi)
704
705 0.38 Thurs. May 31, 2007
706     ~~ More documentation updates ~~
707
708     * Class::MOP::Package
709       - we now deal with stub methods properly
710         - added tests for this
711       - fixed some tests failing on 5.9.5 (thanks blblack)
712
713     * Class::MOP::Attribute
714       - added get_read_method and get_write_method
715         thanks to groditi for this code, tests
716         and docs.
717         - added tests and POD for this
718
719     * Class::MOP::Class
720       - fixed RT issue #27329, clone object now
721         handles undef values correctly.
722         - added tests for this
723       - Corrected anon-class handling so that they
724         will not get reaped when instances still
725         exist which need to reference them. This is
726         the correct behavior, hopefully this is an
727         obscure enough feature that there are not too
728         many work arounds out in the wild.
729         - added tests for this by groditi
730         - updated docs to explain this
731
732     * metaclass
733       - load custom metaclasses automatically (thanks groditi)
734         - added tests for this behavior
735
736 0.37 Sat. March 10, 2007
737     ~~ Many, many documentation updates ~~
738
739     * Class::MOP
740       - added &load_class and &is_class_loaded
741         - added tests and docs for these
742
743     * Class::MOP::Attribute
744       - default now checks the instance with defined to
745         avoid setting off bool-overloads (found by Carl Franks)
746
747 0.37_002
748     * /t
749       - bad name in a test, causing meaningless failuress.
750         No other changes.
751
752 0.37_001
753
754     ~~ GLOBAL CHANGES ~~
755     - All attribute names are now consistent and follow Perl 6
756       style (prefixed with the sigil, and ! as the twigil for
757       private attrs). This should not affect any code, unless
758       you broke encapsulation, in which case, it is your problem
759       anyway.
760
761     !! Class::MOP::Class::Immutable has been removed
762
763     * Class::MOP::Method::Constructor
764       - this has been moved out of Class::MOP::Class::Immutable
765         and is a proper subclass of Class::MOP::Method now.
766
767     * Class::MOP::Class
768       - this module now uses Class::MOP::Immutable for the
769         immutable transformation instead of
770         Class::MOP::Class::Immutable.
771
772     + Class::MOP::Immutable
773       - this module now controls the transformation from a mutable
774         to an immutable version of the class. Docs for this will
775         be coming eventually.
776
777
778 0.36 Sun. Nov. 5, 2006
779     * Class::MOP::Class
780       - added a few 'no warnings' lines to keep annoying
781         (and meaningless) warnings from chirping during
782         global destruction.
783
784     * Class::MOP
785       - some more bootstrapping is now done on the new
786         classes
787
788     * Class::MOP::Class::Immutable
789       *** API CHANGE ***
790       - constructor generation is now handled by
791         the Class::MOP::Method::Constructor class
792
793     * Class::MOP::Method::Constructor
794       - created this to handle constructor generation
795         in Class::MOP::Class::Immutable
796
797     * Class::MOP::Attribute
798       *** API CHANGE ***
799       - attributes now delegate to the
800         Class::MOP::Method::Accessor to generate
801         accessors
802
803     * Class::MOP::Method::Accessor
804       - all accessor generation functions from
805         Class::MOP::Attribute have been moved here
806
807 0.35 Sat. Sept. 30, 2006
808
809     * scripts/class_browser.pl
810       - initial prototype of a class browser, more
811         on this to come. Comments and patches are
812         very much welcome.
813
814     * Class::MOP
815       - All Class::MOP::* accessors are no longer
816         re-generated in the bootstrap, instead
817         they are aliased from the originals
818         - fixed tests to reflect
819       - added Class::MOP::Method (and its subclasses)
820         to the bootstrap
821         - adjusted tests for this
822       - added the Class::MOP::Instance attributes
823         to the bootstrap
824
825     * Class::MOP::Method
826       *** API CHANGE ***
827       - methods are no longer blessed CODE refs
828         but are actual objects which can be CODE-ified
829         - adjusted tests to compensate
830         - adjusted docs for this
831
832     * Class::MOP::Class
833       - changed how methods are dealt with to
834         encapsulate most of the work into the
835         &get_method_map method
836       - made several adjustments for the change
837         in Class::MOP::Method
838       - &add_attribute now checks if you are adding
839         a duplicate name, and properly removes the
840         old one before installing the new one
841         - added tests for this
842         - adjusted docs for this
843
844     * Class::MOP::Class::Immutable
845       - added caching of &get_method_map
846       - fixed issue with &get_package_symbol
847       - cleaned up the methods that die (patch by David Wheeler)
848
849     * Class::MOP::Package
850       - added filtering capabilities to
851         &list_all_package_symbols
852
853 0.34 Sat. Aug. 26, 2006
854     * Class::MOP::Class
855       - added the %:methods attribute, which like
856         the $:version and such just actually goes
857         to the symbol table to get it's stuff.
858         However, it makes the MOP more complete.
859      ** API CHANGE **
860       - The &create method now requires that all
861         but the package name now is passed in as
862         named parameters. See docs for more info.
863         - updated docs and tests for this
864
865     * Class::MOP::Object
866       - added &dump method to easily Data::Dumper
867         an object
868
869     * Class::MOP
870       - cleaned up the initialization of attributes
871         which do not store things in the instance
872       - added the %:methods attribute definition to
873         the bootstrap
874
875     ~ lots of misc. test cleanup
876
877 0.33 Sat. Aug. 19, 2006
878     * Class::MOP::Class
879       - moved the metaclass cache out of here
880         and it is now in Class::MOP itself.
881
882     * Class::MOP
883       - moved all the metaclass cache stuff here
884         - fixed all tests for this
885
886     * Class::MOP::Attribute
887       - reference values (other than CODE refs)
888         are no longer allowed for defaults
889         - added tests for this
890
891     * Class::MOP::Package
892       - fixed an issue with perl 5.8.1 and how it deals
893         with symbol tables. The namespace hash is now
894         always reloaded from the symbol table.
895
896     ~ lots of misc. documentation cleanup
897
898 0.32 Sat. Aug. 12, 2006
899     + added Class::MOP::Object so that the
900       metamodel is more complete (and closer
901       to what Perl 6 will probably be).
902
903     * Class::MOP::Package
904       - refactored entire class, this is now
905         the primary gateway between the metaclass
906         and the Perl 5 symbol table
907         - added many tests for this
908       - this class is now a subclass of
909         Class::MOP::Object
910         - added some tests to reflect this
911
912     * Class::MOP::Class
913       - refactored all symbol table access to
914         use Class::MOP::Package methods instead
915
916     * Class::MOP::Module
917       - adding the $:version attribute in the bootstrap
918         so that Module has a version as an attribute
919         - see comment in Class::MOP for details
920       - added the $:authority attribute to this module
921         as well as an &identifier method, to bring us
922         ever closer to Perl 6 goodness
923         - I have added $AUTHORITY to all the modules
924         - added tests for this
925
926     * Class::MOP::Instance
927       - added &deinitialize_slot for removing slots
928         from an instance
929         - added tests for this
930
931     * Class::MOP::Attribute
932       - added support for &deinitialize_slot for removing
933         slots from an instance
934         - added tests for this
935
936 0.31 Sat. July 15, 2006
937
938     * Class::MOP::Class
939       - added &find_method_by_name to locate a method
940         anywhere within the class hierarchy
941
942     * Class::MOP::Attribute
943       - added &set_value and &get_value for getting
944         the value of the attribute for a particular
945         instance.
946
947 0.30 Wed. July 5, 2006
948     ---------------------------------------
949     This is the first version of Class::MOP
950     to introduce the immutable features which
951     will be used for optimizating the MOP.
952     This support should still be considered
953     experimental, but moving towards stability.
954     ---------------------------------------
955
956     * Created Class::MOP::Class::Immutable
957
958     * Created the Class::MOP::Package and
959       Class::MOP::Module classes to more
960       closely conform to Perl 6's meta-model
961
962     * Class::MOP::Class
963       - now inherits from Class::MOP::Module
964       - several methods moved to ::Module and
965         ::Package and now inherited
966         - added tests for this
967
968     * Class::MOP::Instance
969       - added an is_inlinable method to allow other
970         classes to check before they attempt to optimize.
971       - added an inline_create_instance to inline
972         instance creation (of course)
973
974     ** API CHANGE **
975       - the Class::MOP::Class::*_package_variable
976         methods are all now methods of Class::MOP::Package
977         and called *_package_symbol instead. This is
978         because they are now more general purpose symbol
979         table manipulation methods.
980
981 0.29_02 Thurs. June 22, 2006
982     ++ DEVELOPER RELEASE ++
983     * Class::MOP::Class
984       - small change in &create so that it behaves
985         properly when inherited
986       - small fix to &clone_instance
987
988 0.29_01 Fri. May 12, 2006
989     ++ DEVELOPER RELEASE ++
990       - This release works in combination with
991         Moose 0.09_01, it is a developer release
992         because it introduces a new instance
993         sub-protocol and has not yet been
994         optimized.
995
996     * Class::MOP::Class
997       - anon-classes are now properly garbage collected
998         - added tests for this
999       - improved method modifier wrapping
1000
1001     * Class::MOP::Instance
1002       - added new instance protocol
1003         - added tests for this
1004       - changed all relevant modules and examples
1005         - Class::MOP::Class
1006         - Class::MOP::Attribute
1007         - examples/*
1008
1009     * metaclass
1010       - you no longer need to specify the metaclass
1011         itself, if it is not there, Class::MOP::Class
1012         is just assumed
1013         - updated tests for this
1014
1015     * examples/
1016       - added ArrayBasedStorage example to show
1017         instance storage using ARRAY refs instead of
1018         HASH refs.
1019         - added tests for this
1020       - InsideOutClass is totally revised using the
1021         new instance protocol
1022         - added more tests for this
1023
1024 0.26 Mon. April 24, 2006
1025     * Class::MOP::Class
1026       - added find_attribute_by_name method
1027         - added tests and docs for this
1028       - some small optimizations
1029
1030     * Class::MOP::Attribute
1031       - some small optimizations
1032
1033 0.25 Thurs. April 20, 2006
1034     * Class::MOP::Class
1035       - added create_anon_class for creating anonymous classes
1036         - added tests for this
1037       - added get_all_metaclasses, get_all_metaclass_names
1038         and get_all_metaclass_instances method to allow
1039         access to all the cached metaclass objects.
1040       - attribute slot initialization is now the responsibility
1041         of the attribute itself, and construct_instance now
1042         delegates appropriately
1043
1044     * Class::MOP::Attribute
1045       - attribute slot initialization is now the responsibility
1046         of the attribute itself, so we added a method for it
1047         called initialize_instance_slot
1048
1049     * examples/
1050       - adjusted all the examples to use the new attribute
1051         initialize_instance_slot method
1052
1053 0.24 Tues. April 11, 2006
1054     * Class::MOP::Class
1055       - cleaned up how the before/after/around method
1056         modifiers get named with Sub::Name
1057
1058 0.23 Thurs. March 30, 2006
1059         * Class::MOP::Class
1060           - fixed the way attribute defaults are handled
1061             during instance construction (bug found by chansen)
1062
1063         * Class::MOP::Attribute
1064           - read-only accessors ('reader') will now die if
1065             passed more than one argument (attempting to write
1066             to them basically)
1067               - added tests for this
1068               - adjusted all /example files to comply
1069
1070 0.22 Mon. March 20, 2006
1071     * Class::MOP::Class
1072       - localized $@ in the *_package_variable functions
1073         because otherwise, it does ugly things in Moose.
1074           - added test case for this
1075
1076 0.21 Wed. March 15, 2006
1077     * Class::MOP::Class
1078       - fixed issue where metaclasses are reaped from
1079         our cache in global destruction, and so are not
1080         available in DESTORY calls
1081
1082 0.20 Thurs. March 2, 2006
1083     - removed the dependency for Clone since
1084       we no longer to deep-cloning by default.
1085
1086     * Class::MOP::Method
1087       - added &package_name, &name and
1088         &fully_qualified_name methods, some of
1089         which were formerly private subs in
1090         Class::MOP::Class
1091
1092     * Class::MOP::Method::Wrapped
1093       - allows for a method to be wrapped with
1094         before, after and around modifiers
1095           - added tests and docs for this feature
1096
1097     * Class::MOP::Class
1098       - improved &get_package_symbol
1099           - &version and &superclasses now use it
1100       - methods are now blessed into Class::MOP::Method
1101         whenever possible
1102       - added methods to install CLOS-style method modifiers
1103          - &add_before_method_modifier
1104          - &add_after_method_modifier
1105          - &add_around_method_modifier
1106              - added tests and docs for these
1107       - added &find_next_method_by_name which finds the
1108         equivalent of SUPER::method_name
1109
1110 0.12 Thurs. Feb 23, 2006
1111     - reduced the dependency on B, no need to always
1112       have the latest
1113
1114     * examples/
1115       - added docs to the C3 method dispatch order test
1116       - fixed missing Algorithm::C3 dependency by making
1117         the test skip if it is not installed
1118
1119 0.11 Mon Feb. 20, 2006
1120     * examples/
1121       - added example of changing method dispatch order to C3
1122
1123     * Class::MOP::Class
1124       - changed how clone_instance behaves, it now only does a
1125         shallow clone (see docs for more details)
1126         - added docs and tests
1127
1128 0.10 Tues Feb. 14, 2006
1129     ** This release was mostly about writing more tests and
1130        cleaning out old and dusty code, the MOP should now
1131        be considered "ready to use".
1132
1133     - adding more tests to get coverage up a little higher,
1134       mostly testing errors and edge cases.
1135       - test coverage is now at 99%
1136
1137     * Class::MOP
1138       - no longer optionally exports to UNIVERSAL::meta or
1139         creates a custom metaclass generator, use the
1140         metaclass pragma instead.
1141
1142     * Class::MOP::Class
1143       - fixed a number of minor issues which came up in the
1144         error/edge-case tests
1145
1146     * Class::MOP::Attribute
1147       - fixed a number of minor issues which came up in the
1148         error/edge-case tests
1149
1150     * examples/
1151       - fixing the AttributesWithHistory example, it was broken.
1152
1153 0.06 Thurs Feb. 9, 2006
1154     * metaclass
1155       - adding new metaclass pragma to make setting up the
1156         metaclass a little more straightforward
1157
1158     * Class::MOP
1159       - clean up bootstrapping to include more complete
1160         attribute definitions for Class::MOP::Class and
1161         Class::MOP::Attribute (accessors, readers, writers,
1162         etc.) ... it is redundant, but is useful meta-info
1163         to have around.
1164
1165     * Class::MOP::Class
1166       - fixing minor meta-circularity issue with &meta, it
1167         is now more useful for subclasses
1168       - added &get_attribute_map as an accessor for the
1169         hash of attribute meta objects
1170       - &compute_all_applicable_attributes now just returns
1171         the attribute meta-object, rather than the HASH ref
1172         since all the same info can be gotten from the
1173         attribute meta-object itself
1174           - updated docs & tests to reflect
1175       - added &clone_instance method which does a deep clone
1176         of the instance structure created by &construct_instance
1177           - added docs & tests for this
1178           - added Clone as a dependency
1179       - added &new_object and &clone_object convience methods to
1180         return blessed new or cloned instances
1181           - they handle Class::MOP::Class singletons correctly too
1182           - added docs & tests for this
1183       - cleaned up the &constuct_class_instance so that it behaves
1184         more like &construct_instance (and managed the singletons too)
1185       - added the &check_metaclass_compatibility method to make sure
1186         that metaclasses are upward and downward compatible.
1187           - added tests and docs for this
1188
1189     * examples/
1190       - adjusting code to use the &Class::MOP::Class::meta
1191         fix detailed above
1192       - adjusting code to use the metaclass pragma
1193
1194 0.05 Sat Feb. 4, 2006
1195     * Class::MOP::Class
1196       - added the &attribute_metaclass and &method_metaclass
1197         attributes which contain a metaclass name to use for
1198         attributes/methods respectively
1199
1200     * Class::MOP
1201       - bootstrap additional attributes for Class::MOP::Class
1202
1203     * examples/
1204       - adjusted the example code and tests to use the new
1205         &attribute_metaclass feature of Class::MOP::Class
1206       - added new example:
1207         - LazyClass
1208
1209 0.04 Fri Feb. 3, 2006
1210     * Class::MOP::Class
1211       - some documentation suggestions from #perl6
1212
1213     * Class::MOP::Attribute
1214       - improved error messages
1215
1216     * examples/
1217       - added new examples:
1218         - AttributesWithHistory
1219         - ClassEncapsultedAttributes
1220
1221 0.03 Fri Feb. 3, 2006
1222     - converted to Module::Build instead of EU::MM
1223
1224     * Class::MOP::Attribute
1225       - refactored method generation code
1226       - attributes are now associated with class directly
1227
1228     * examples/
1229       - refactored the InsideOut example to take advantage
1230         of the Class::MOP::Attribute refactoring
1231       - changed example files to .pod files and hide thier
1232         package names from PAUSE (I don't want to own these
1233         namespaces really, they are just examples)
1234
1235 0.02 Thurs Feb. 2, 2006
1236     - moving examples from t/lib/* to examples/*
1237         - adding POD documentation to the examples
1238
1239 0.01 Thurs Feb. 2, 2006
1240     - Initial release