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