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