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