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