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