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