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