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