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