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