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