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