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