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