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