some tweaks for release
[gitmo/Class-MOP.git] / Changes
1 Revision history for Perl extension Class-MOP.
2
3 0.50
4     * Class::MOP::Class
5       - fixed bug in immutable to make sure that 
6         transformation arguments are saved 
7         correctly (mst)
8         
9     * Class::MOP::Immutable
10       - fixed a bug (see above)
11       
12     * Class::MOP::Attribute
13       - some doc updates
14
15 0.49 Fri. Dec. 14, 2007
16     !! Class::MOP now loads ~70% faster !!
17     !! with XS speedups (thanks konobi) !!
18         
19     * Class::MOP
20       - removed the dependency on B
21       - added two XS functions (thanks konobi)
22         - get_code_info($code) which replaces all
23           the B fiddling we were doing with
24           faster/leaner XS level fiddling
25         - check_package_cache_flag($pkg_name) which 
26           returns the PL_sub_generation variable to 
27           be used to help manage method caching.
28           
29           NOTE: 
30           In 5.10 or greater this will actually 
31           use the mro::get_pkg_gen instead to give 
32           even more accurate caching information. 
33           blblack++ for that stuff :)
34           
35     * Class::MOP::Class
36       - added the &subclasses method (thanks rlb)
37       - added the update_package_cache_flag and 
38         reset_package_cache_flag which help keep 
39         track of when we need to re-fetch the 
40         method map. 
41       - Several small improvements to take advantage
42         of the new method map caching features
43
44 0.48 Mon. Nov. 26, 2007
45     * Class::MOP::Attribute
46       - fixed get_read/write_method to handle the 
47         HASH ref case, which makes the 
48         get_read/write_method_ref handle it too.
49         - added more tests for this
50
51 0.47 Sat. Nov. 24, 2007
52     * Class::MOP::Attribute
53       - fixed misspelling in get_write_method_ref
54         - added more tests for this
55
56 0.46 Fri. Nov. 23, 2007
57     * Class::MOP::Class
58       - added the linearized_isa method instead of constantly 
59         pruning duplicate classes (this will be even more 
60         useful in the 5.10-compat version coming soon)
61     
62     * Class::MOP::Attribute
63       - added the get_read_method_ref and get_write_method_ref
64         methods which allow you to retrieve a CODE ref which 
65         can always be used to read or write an attribute.
66
67 0.45 Thurs. Nov. 13, 2007
68     * Class::MOP::Attribute
69       - Fix error message on confess (groditi)
70
71 0.44 Thurs. Nov. 13, 2007
72     - Apparently I didn't make dist correctly (groditi)
73
74 0.43 Thurs. Nov. 13, 2007
75     * Class::MOP
76       - Add support for the 'builder' attribute (groditi)
77
78     * Class::MOP::Class
79       - optimise metaclass-already-exists check in 
80         construct_class_instance (groditi)
81       - duplicate check into initialize to save a 
82         call through (groditi)
83
84     * Class::MOP::Attribute
85       - Add support for the 'builder' attribute (groditi)
86       - Make predicates check for the existence of a value, not whether 
87         it is defined (groditi)
88
89     * Class::MOP::Instance
90       - Make predicates check for the existence of a value, not whether 
91         it is defined (groditi)
92
93     * Class::MOP::Method::Accessor 
94       - made this a subclass of Class::MOP::Method::Generated
95         - removed the relevant attributes
96
97     * Class::MOP::Method::Constructor
98       - fixed the cached values we had to be more sane
99       - made this a subclass of Class::MOP::Method::Generated
100       - fixed generated constructor so it properly handles 
101         subclasses now.
102         - added tests for this
103       - added the option to allow for both inlined and 
104         non-inlined constructors.
105       - Update inlined methods for builder and predicate changes (groditi)
106
107     * Class::MOP::Method::Generated
108       - added this class as an abstract base for the 
109         Class::MOP::Method::{Constructor,Accessor} classes
110         - added tests for this
111
112     *t/
113       - Alter tests (005, 014 020, 021) for new builder addition (groditi)
114       - Tests for new predicate behavior (and corrections to old tests) (groditi)
115
116     *examples/
117       - Update ArrayRef based class example to work with predicate changes
118
119 0.42 Mon. July 16, 2007
120     !!! Horray for mst, he fixed it !!!
121
122     * Class::MOP::Package
123       - alter symbol table handling to deal with 5.8.x and 5.9.x
124       
125     * t/
126       - Get rid of the crappy workaround from 0.40/41
127
128 0.41 Sun. July 15, 2007
129     * t/
130         Arghh!!! My TODO test didn't work, so I handle
131         it manually now so that people can use this 
132         with 5.9.5/bleadperl without issue.
133
134 0.40 Tues, July 3, 2007
135     * t/
136       ~ marked a test in 003_methods.t as TODO 
137         for perl 5.9.5 (this test is irrelvant to 
138         the module functioning on 5.9.5 for the most 
139         part anyway)
140
141 0.39 Mon. June 18, 2007
142     * Class::MOP::Immutable
143       - added make_metaclass_mutable + docs (groditi)
144       - removed unused variable
145       - added create_immutable_transformer
146         necessary for sane overloading of immutable behavior
147          - tests for this (groditi) 
148
149     * Class::MOP::Class
150       - Immutability can now be undone,
151         added make_mutable + tests + docs (groditi)
152       - Massive changes to the way Immutable is done
153         for details see comments next to make_immutable
154         This fixes a bug where custom metaclasses broke
155         when made immutable. We are now keeping one immutable 
156         metaclass instance per metaclass instead of just one 
157         to prevent isa hierarchy corruption. Memory use will go
158         up, but I suspect it will be neglible.
159          - New tests added for this behavior.  (groditi)
160
161 0.38 Thurs. May 31, 2007
162     ~~ More documentation updates ~~
163     
164     * Class::MOP::Package
165       - we now deal with stub methods properly
166         - added tests for this
167       - fixed some tests failing on 5.9.5 (thanks blblack)
168         
169     * Class::MOP::Attribute
170       - added get_read_method and get_write_method
171         thanks to groditi for this code, tests 
172         and docs.
173         - added tests and POD for this
174     
175     * Class::MOP::Class
176       - fixed RT issue #27329, clone object now 
177         handles undef values correctly.
178         - added tests for this
179       - Corrected anon-class handling so that they 
180         will not get reaped when instances still 
181         exist which need to reference them. This is 
182         the correct behavior, hopefully this is an 
183         obscure enough feature that there are not too 
184         many work arounds out in the wild.
185         - added tests for this by groditi   
186         - updated docs to explain this
187
188     * metaclass
189       - load custom metaclasses automatically (thanks groditi)
190         - added tests for this behavior
191
192 0.37 Sat. March 10, 2007
193     ~~ Many, many documentation updates ~~
194     
195     * Class::MOP
196       - added &load_class and &is_class_loaded 
197         - added tests and docs for these
198
199     * Class::MOP::Attribute
200       - default now checks the instance with defined to 
201         avoid setting off bool-overloads (found by Carl Franks)
202
203 0.37_002
204     * /t 
205       - bad name in a test, causing meaningless failuress. 
206         No other changes.
207
208 0.37_001
209     
210     ~~ GLOBAL CHANGES ~~
211     - All attribute names are now consistent and follow Perl 6 
212       style (prefixed with the sigil, and ! as the twigil for 
213       private attrs). This should not affect any code, unless 
214       you broke encapsulation, in which case, it is your problem 
215       anyway.
216       
217     !! Class::MOP::Class::Immutable has been removed
218     
219     * Class::MOP::Method::Constructor
220       - this has been moved out of Class::MOP::Class::Immutable 
221         and is a proper subclass of Class::MOP::Method now.
222         
223     * Class::MOP::Class
224       - this module now uses Class::MOP::Immutable for the 
225         immutable transformation instead of 
226         Class::MOP::Class::Immutable.
227         
228     + Class::MOP::Immutable 
229       - this module now controls the transformation from a mutable 
230         to an immutable version of the class. Docs for this will 
231         be coming eventually.
232     
233
234 0.36 Sun. Nov. 5, 2006
235     * Class::MOP::Class
236       - added a few 'no warnings' lines to keep annoying 
237         (and meaningless) warnings from chirping during 
238         global destruction.
239           
240     * Class::MOP
241       - some more bootstrapping is now done on the new 
242         classes
243     
244     * Class::MOP::Class::Immutable
245       *** API CHANGE ***    
246       - constructor generation is now handled by 
247         the Class::MOP::Method::Constructor class
248      
249     * Class::MOP::Method::Constructor
250       - created this to handle constructor generation 
251         in Class::MOP::Class::Immutable
252     
253     * Class::MOP::Attribute
254       *** API CHANGE ***    
255       - attributes now delegate to the 
256         Class::MOP::Method::Accessor to generate 
257         accessors
258     
259     * Class::MOP::Method::Accessor
260       - all accessor generation functions from 
261         Class::MOP::Attribute have been moved here
262
263 0.35 Sat. Sept. 30, 2006
264
265     * scripts/class_browser.pl
266       - initial prototype of a class browser, more 
267         on this to come. Comments and patches are 
268         very much welcome.
269
270     * Class::MOP
271       - All Class::MOP::* accessors are no longer 
272         re-generated in the bootstrap, instead 
273         they are aliased from the originals
274         - fixed tests to reflect
275       - added Class::MOP::Method (and its subclasses) 
276         to the bootstrap
277         - adjusted tests for this
278       - added the Class::MOP::Instance attributes
279         to the bootstrap
280     
281     * Class::MOP::Method
282       *** API CHANGE ***
283       - methods are no longer blessed CODE refs
284         but are actual objects which can be CODE-ified
285         - adjusted tests to compensate
286         - adjusted docs for this        
287
288     * Class::MOP::Class
289       - changed how methods are dealt with to 
290         encapsulate most of the work into the 
291         &get_method_map method
292       - made several adjustments for the change
293         in Class::MOP::Method
294       - &add_attribute now checks if you are adding 
295         a duplicate name, and properly removes the 
296         old one before installing the new one
297         - added tests for this
298         - adjusted docs for this
299     
300     * Class::MOP::Class::Immutable
301       - added caching of &get_method_map
302       - fixed issue with &get_package_symbol
303       - cleaned up the methods that die (patch by David Wheeler)
304     
305     * Class::MOP::Package
306       - added filtering capabilities to 
307         &list_all_package_symbols
308
309 0.34 Sat. Aug. 26, 2006
310     * Class::MOP::Class
311       - added the %:methods attribute, which like
312         the $:version and such just actually goes 
313         to the symbol table to get it's stuff. 
314         However, it makes the MOP more complete.
315      ** API CHANGE **
316       - The &create method now requires that all 
317         but the package name now is passed in as 
318         named parameters. See docs for more info.
319         - updated docs and tests for this
320         
321     * Class::MOP::Object
322       - added &dump method to easily Data::Dumper 
323         an object
324         
325     * Class::MOP
326       - cleaned up the initialization of attributes 
327         which do not store things in the instance 
328       - added the %:methods attribute definition to
329         the bootstrap
330         
331     ~ lots of misc. test cleanup
332
333 0.33 Sat. Aug. 19, 2006
334     * Class::MOP::Class
335       - moved the metaclass cache out of here 
336         and it is now in Class::MOP itself.
337         
338     * Class::MOP
339       - moved all the metaclass cache stuff here
340         - fixed all tests for this
341
342     * Class::MOP::Attribute
343       - reference values (other than CODE refs) 
344         are no longer allowed for defaults
345         - added tests for this
346     
347     * Class::MOP::Package
348       - fixed an issue with perl 5.8.1 and how it deals 
349         with symbol tables. The namespace hash is now 
350         always reloaded from the symbol table. 
351
352     ~ lots of misc. documentation cleanup
353
354 0.32 Sat. Aug. 12, 2006
355     + added Class::MOP::Object so that the 
356       metamodel is more complete (and closer
357       to what Perl 6 will probably be).
358
359     * Class::MOP::Package
360       - refactored entire class, this is now 
361         the primary gateway between the metaclass
362         and the Perl 5 symbol table
363         - added many tests for this
364       - this class is now a subclass of 
365         Class::MOP::Object
366         - added some tests to reflect this
367         
368     * Class::MOP::Class
369       - refactored all symbol table access to 
370         use Class::MOP::Package methods instead
371         
372     * Class::MOP::Module
373       - adding the $:version attribute in the bootstrap
374         so that Module has a version as an attribute
375         - see comment in Class::MOP for details
376       - added the $:authority attribute to this module 
377         as well as an &identifier method, to bring us 
378         ever closer to Perl 6 goodness 
379         - I have added $AUTHORITY to all the modules 
380         - added tests for this
381       
382     * Class::MOP::Instance
383       - added &deinitialize_slot for removing slots 
384         from an instance
385         - added tests for this      
386       
387     * Class::MOP::Attribute 
388       - added support for &deinitialize_slot for removing
389         slots from an instance
390         - added tests for this
391
392 0.31 Sat. July 15, 2006
393
394     * Class::MOP::Class
395       - added &find_method_by_name to locate a method
396         anywhere within the class hierarchy   
397         
398     * Class::MOP::Attribute
399       - added &set_value and &get_value for getting 
400         the value of the attribute for a particular 
401         instance.
402
403 0.30 Wed. July 5, 2006
404     ---------------------------------------
405     This is the first version of Class::MOP 
406     to introduce the immutable features which
407     will be used for optimizating the MOP. 
408     This support should still be considered
409     experimental, but moving towards stability.
410     ---------------------------------------
411     
412     * Created Class::MOP::Class::Immutable  
413     
414     * Created the Class::MOP::Package and 
415       Class::MOP::Module classes to more 
416       closely conform to Perl 6's meta-model
417
418     * Class::MOP::Class
419       - now inherits from Class::MOP::Module
420       - several methods moved to ::Module and 
421         ::Package and now inherited
422         - added tests for this
423       
424     * Class::MOP::Instance
425       - added an is_inlinable method to allow other 
426         classes to check before they attempt to optimize.
427       - added an inline_create_instance to inline 
428         instance creation (of course) 
429         
430     ** API CHANGE **
431       - the Class::MOP::Class::*_package_variable 
432         methods are all now methods of Class::MOP::Package
433         and called *_package_symbol instead. This is 
434         because they are now more general purpose symbol 
435         table manipulation methods.        
436
437 0.29_02 Thurs. June 22, 2006
438     ++ DEVELOPER RELEASE ++
439     * Class::MOP::Class
440       - small change in &create so that it behaves 
441         properly when inherited
442       - small fix to &clone_instance
443
444 0.29_01 Fri. May 12, 2006
445     ++ DEVELOPER RELEASE ++
446       - This release works in combination with 
447         Moose 0.09_01, it is a developer release
448         because it introduces a new instance 
449         sub-protocol and has not yet been 
450         optimized.  
451
452     * Class::MOP::Class
453       - anon-classes are now properly garbage collected
454         - added tests for this 
455       - improved method modifier wrapping 
456
457     * Class::MOP::Instance
458       - added new instance protocol
459         - added tests for this
460       - changed all relevant modules and examples
461         - Class::MOP::Class
462         - Class::MOP::Attribute
463         - examples/*
464
465     * metaclass
466       - you no longer need to specify the metaclass
467         itself, if it is not there, Class::MOP::Class
468         is just assumed
469         - updated tests for this
470
471     * examples/
472       - added ArrayBasedStorage example to show 
473         instance storage using ARRAY refs instead of
474         HASH refs. 
475         - added tests for this
476       - InsideOutClass is totally revised using the 
477         new instance protocol
478         - added more tests for this
479
480 0.26 Mon. April 24, 2006
481     * Class::MOP::Class
482       - added find_attribute_by_name method
483         - added tests and docs for this
484       - some small optimizations
485
486     * Class::MOP::Attribute
487       - some small optimizations
488
489 0.25 Thurs. April 20, 2006
490     * Class::MOP::Class
491       - added create_anon_class for creating anonymous classes
492         - added tests for this
493       - added get_all_metaclasses, get_all_metaclass_names
494         and get_all_metaclass_instances method to allow
495         access to all the cached metaclass objects.
496       - attribute slot initialization is now the responsibility
497         of the attribute itself, and construct_instance now 
498         delegates appropriately
499         
500     * Class::MOP::Attribute
501       - attribute slot initialization is now the responsibility
502         of the attribute itself, so we added a method for it
503         called initialize_instance_slot
504     
505     * examples/
506       - adjusted all the examples to use the new attribute 
507         initialize_instance_slot method 
508
509 0.24 Tues. April 11, 2006
510     * Class::MOP::Class
511       - cleaned up how the before/after/around method 
512         modifiers get named with Sub::Name
513
514 0.23 Thurs. March 30, 2006
515         * Class::MOP::Class
516           - fixed the way attribute defaults are handled 
517             during instance construction (bug found by chansen)
518             
519         * Class::MOP::Attribute
520           - read-only accessors ('reader') will now die if 
521             passed more than one argument (attempting to write
522             to them basically)
523               - added tests for this
524               - adjusted all /example files to comply 
525
526 0.22 Mon. March 20, 2006
527     * Class::MOP::Class
528       - localized $@ in the *_package_variable functions
529         because otherwise, it does ugly things in Moose.
530           - added test case for this
531
532 0.21 Wed. March 15, 2006
533     * Class::MOP::Class
534       - fixed issue where metaclasses are reaped from 
535         our cache in global destruction, and so are not
536         available in DESTORY calls
537
538 0.20 Thurs. March 2, 2006
539     - removed the dependency for Clone since 
540       we no longer to deep-cloning by default.
541     
542     * Class::MOP::Method
543       - added &package_name, &name and 
544         &fully_qualified_name methods, some of 
545         which were formerly private subs in 
546         Class::MOP::Class
547       
548     * Class::MOP::Method::Wrapped
549       - allows for a method to be wrapped with 
550         before, after and around modifiers 
551           - added tests and docs for this feature
552
553     * Class::MOP::Class
554       - improved &get_package_symbol
555           - &version and &superclasses now use it
556       - methods are now blessed into Class::MOP::Method
557         whenever possible
558       - added methods to install CLOS-style method modifiers 
559          - &add_before_method_modifier
560          - &add_after_method_modifier         
561          - &add_around_method_modifier
562              - added tests and docs for these
563       - added &find_next_method_by_name which finds the 
564         equivalent of SUPER::method_name
565
566 0.12 Thurs. Feb 23, 2006
567     - reduced the dependency on B, no need to always 
568       have the latest
569
570     * examples/
571       - added docs to the C3 method dispatch order test
572       - fixed missing Algorithm::C3 dependency by making 
573         the test skip if it is not installed
574
575 0.11 Mon Feb. 20, 2006
576     * examples/
577       - added example of changing method dispatch order to C3
578       
579     * Class::MOP::Class
580       - changed how clone_instance behaves, it now only does a
581         shallow clone (see docs for more details)
582         - added docs and tests
583
584 0.10 Tues Feb. 14, 2006
585     ** This release was mostly about writing more tests and 
586        cleaning out old and dusty code, the MOP should now 
587        be considered "ready to use".
588
589     - adding more tests to get coverage up a little higher,
590       mostly testing errors and edge cases.
591       - test coverage is now at 99%
592       
593     * Class::MOP
594       - no longer optionally exports to UNIVERSAL::meta or
595         creates a custom metaclass generator, use the 
596         metaclass pragma instead.
597
598     * Class::MOP::Class  
599       - fixed a number of minor issues which came up in the 
600         error/edge-case tests
601         
602     * Class::MOP::Attribute 
603       - fixed a number of minor issues which came up in the 
604         error/edge-case tests        
605      
606     * examples/
607       - fixing the AttributesWithHistory example, it was broken.
608
609 0.06 Thurs Feb. 9, 2006
610     * metaclass
611       - adding new metaclass pragma to make setting up the 
612         metaclass a little more straightforward
613         
614     * Class::MOP
615       - clean up bootstrapping to include more complete 
616         attribute definitions for Class::MOP::Class and 
617         Class::MOP::Attribute (accessors, readers, writers, 
618         etc.) ... it is redundant, but is useful meta-info
619         to have around.
620
621     * Class::MOP::Class
622       - fixing minor meta-circularity issue with &meta, it 
623         is now more useful for subclasses
624       - added &get_attribute_map as an accessor for the 
625         hash of attribute meta objects
626       - &compute_all_applicable_attributes now just returns
627         the attribute meta-object, rather than the HASH ref
628         since all the same info can be gotten from the 
629         attribute meta-object itself
630           - updated docs & tests to reflect
631       - added &clone_instance method which does a deep clone
632         of the instance structure created by &construct_instance
633           - added docs & tests for this
634           - added Clone as a dependency
635       - added &new_object and &clone_object convience methods to
636         return blessed new or cloned instances
637           - they handle Class::MOP::Class singletons correctly too
638           - added docs & tests for this
639       - cleaned up the &constuct_class_instance so that it behaves
640         more like &construct_instance (and managed the singletons too)
641       - added the &check_metaclass_compatibility method to make sure
642         that metaclasses are upward and downward compatible.
643           - added tests and docs for this
644           
645     * examples/
646       - adjusting code to use the &Class::MOP::Class::meta
647         fix detailed above
648       - adjusting code to use the metaclass pragma
649       
650 0.05 Sat Feb. 4, 2006
651     * Class::MOP::Class
652       - added the &attribute_metaclass and &method_metaclass
653         attributes which contain a metaclass name to use for 
654         attributes/methods respectively
655     
656     * Class::MOP
657       - bootstrap additional attributes for Class::MOP::Class 
658         
659     * examples/
660       - adjusted the example code and tests to use the new
661         &attribute_metaclass feature of Class::MOP::Class
662       - added new example:
663         - LazyClass
664
665 0.04 Fri Feb. 3, 2006
666     * Class::MOP::Class
667       - some documentation suggestions from #perl6
668     
669     * Class::MOP::Attribute
670       - improved error messages    
671     
672     * examples/
673       - added new examples:
674         - AttributesWithHistory
675         - ClassEncapsultedAttributes
676
677 0.03 Fri Feb. 3, 2006
678     - converted to Module::Build instead of EU::MM
679     
680     * Class::MOP::Attribute
681       - refactored method generation code
682       - attributes are now associated with class directly
683     
684     * examples/
685       - refactored the InsideOut example to take advantage 
686         of the Class::MOP::Attribute refactoring
687       - changed example files to .pod files and hide thier
688         package names from PAUSE (I don't want to own these
689         namespaces really, they are just examples)
690
691 0.02 Thurs Feb. 2, 2006
692     - moving examples from t/lib/* to examples/*
693         - adding POD documentation to the examples
694
695 0.01 Thurs Feb. 2, 2006
696     - Initial release