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