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