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