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