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