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