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