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