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