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