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