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