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