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