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