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