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