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