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