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