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