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