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