0.34
[gitmo/Moose.git] / Changes
1 Revision history for Perl extension Moose
2
3 0.34 Mon. Jan. 21, 2008
4     ~~~ more misc. doc. fixes ~~~
5     ~~ updated copyright dates ~~
6
7     Moose is now a postmodern object system :)
8       - (see the POD for details)
9
10     * <<Role System Refactoring>>
11     - this release contains a major reworking and
12       cleanup of the role system
13       - 100% backwards compat.
14       - Role application now restructured into seperate
15         classes based on type of applicants
16       - Role summation (combining of more than one role)
17         is much cleaner and anon-classes are no longer
18         used in this process
19       - new Composite role metaclass
20       - runtime application of roles to instances
21         is now more efficient and re-uses generated
22         classes when applicable
23
24     * <<New Role composition features>>
25       - methods can now be excluded from a given role
26         during composition
27
28             with 'My::Role' => { excludes => [qw/method1 method2/] };
29
30       - methods can now be aliased to another name (and
31         still retain the original as well)
32
33             with 'My::Role' => { 
34                 alias => {
35                     method1 => method1_aliased
36                 }
37             };
38             
39     * <<New Attribute traits>>
40       - allows arbitrary roles to be applied to attribute metaobjects
41         to allow better combination of custom attribute features. Docs
42         are coming soon for this feature.
43
44     * <<New Maybe[$type] parameterized type>>
45       - added this new type which basically means the value is 
46         of $type or it is undef
47
48     ====
49
50     * Moose
51       Moose::Role
52       - now uses the Moose::Util::apply_all_roles to deal
53         with role application
54
55     * Moose::Util
56       - added the &apply_all_roles function
57
58     * Moose::Util::TypeConstraints
59       - all optimized type constraint subs are now
60         pulled from the Moose::Util::TypeConstraints::OptimizedConstraints
61         module (thanks to nothingmuch)
62       - improved support for the IO:: family of modules within the
63         FileHandle type constraint
64     
65     * Moose::Util::TypeConstraints::OptimizedConstraints
66       - added this module (see above)
67
68     * Moose::Meta::Class
69       - fixed the &_process_attribute method to be called
70         by &add_attribute, so that the API is now correct
71
72     * Moose::Meta::Method::Accessor
73       - fixed bug when passing a list of values to
74         an accessor would get (incorrectly) ignored.
75         Thanks to Sartak for finding this ;)
76         - added tests for this (Sartak again)
77
78     * Moose::Meta::Method::Accessor
79       Moose::Meta::Method::Constructor
80       Moose::Meta::Attribute
81       Moose::Meta::TypeConstraint
82       Moose::Meta::TypeCoercion
83       - lots of cleanup of such things as:
84         - generated methods
85         - type constraint handling
86         - error handling/messages
87         (thanks to nothingmuch)
88     
89     * Moose::Meta::TypeConstraint::Parameterizable
90       - added this module to support the refactor 
91         in Moose::Meta::TypeConstraint::Parameterized
92
93     * Moose::Meta::TypeConstraint::Parameterized
94       - refactored how these types are handled so they 
95         are more generic and not confined to ArrayRef
96         and HashRef only
97
98     * t/
99       - shortened some file names for better VMS support (RT #32381)
100
101 0.33 Fri. Dec. 14, 2007
102     !! Moose now loads 2 x faster !!
103     !!  with new Class::MOP 0.49  !!
104
105     ++ new oose.pm module to make command line
106        Moose-ness easier (see POD docs for more)
107
108     * Moose::Meta::Class
109     * Moose::Meta::Role
110       - several tweaks to take advantage of the
111         new method map caching in Class::MOP
112
113     * Moose::Meta::TypeConstraint::Parameterized
114       - allow subtypes of ArrayRef and HashRef to
115         be used as a container (sartak)
116         - added tests for this
117       - basic support for coercion to ArrayRef and
118         HashRef for containers (sartak)
119         - added tests for this
120
121     * Moose::Meta::TypeCoercion
122       - coercions will now create subtypes as needed
123         so you can now add coercions to parameterized
124         types without having to explictly define them
125         - added tests for this
126
127     * Moose::Meta::Method::Accessor
128       - allow subclasses to decide whether we need
129         to copy the value into a new variable (sartak)
130
131 0.32 Tues. Dec. 4, 2007
132     * Moose::Util::TypeConstraints
133       - fixing how subtype aliases of unions work
134         they should inherit the parent's coercion
135         - added tests for this
136       - you can now define multiple coercions on
137         a single type at different times instead of
138         having to do it all in one place
139         - added tests for this
140
141     * Moose::Meta::TypeConstraint
142       - there is now a default constraint of sub { 1 }
143         instead of Moose::Util::TypeConstraints setting
144         this for us
145
146     * Moose::Meta::TypeCoercion
147     * Moose::Meta::TypeCoercion::Union
148       - added the &has_coercion_for_type and
149         &add_type_coercions methods to support the
150         new features above (although you cannot add
151         more type coercions for Union types)
152
153 0.31 Mon. Nov. 26, 2007
154     * Moose::Meta::Attribute
155       - made the +attr syntax handle extending types with
156         parameters. So "has '+foo' => (isa => 'ArrayRef[Int]')"
157         now works if the original foo is an ArrayRef.
158         - added tests for this.
159       - delegation now works even if the attribute does not
160         have a reader method using the get_read_method_ref
161         method from Class::MOP::Attribute.
162         - added tests for this
163         - added docs for this
164
165     * Moose::Util::TypeConstraints
166       - passing no "additional attribute info" to
167         &find_or_create_type_constraint will no longer
168         attempt to create an __ANON__ type for you,
169         instead it will just return undef.
170         - added docs for this
171
172 0.30 Fri. Nov. 23, 2007
173     * Moose::Meta::Method::Constructor
174       -builder related bug in inlined constructor. (groditi)
175
176     * Moose::Meta::Method::Accessor
177       - genereate unnecessary calls to predicates and refactor
178         code generation for runtime speed (groditi)
179
180     * Moose::Util::TypeConstraints
181       - fix ClassName constraint to introspect symbol table (mst)
182         - added more tests for this (mst)
183       - fixed it so that subtype 'Foo' => as 'HashRef[Int]' ...
184         with work correctly.
185         - added tests for this
186
187     * Moose::Cookbook
188       - adding the link to Recipie 11 (written by Sartak)
189         - adding test for SYNOPSIS code
190
191     * t/
192       - New tests for builder bug. Upon instantiation, if an
193         attribute had a builder, no value and was not lazy the
194         builder default was not getting run, oops. (groditi)
195
196 0.29 Tues. Nov. 13, 2007
197     * Moose::Meta::Attribute
198       - Fix error message on missing builder method (groditi)
199
200     * Moose::Meta::Method::Accessor
201       - Fix error message on missing builder method (groditi)
202
203     * t/
204       - Add test to check for the correct error message when
205         builder method is missing (groditi)
206
207 0.28 Tues. Nov. 13, 2007
208     - 0.27 packaged incorrectly (groditi)
209
210 0.27 Tues. Nov. 13, 2007
211     * Moose::Meta::Attribute
212       - Added support for the new builder option (groditi)
213       - Added support for lazy_build option (groditi)
214       - Changed slot initialization for predicate changes (groditi)
215
216     * Moose::Meta::Method::Accessor
217       - Added support for lazy_build option (groditi)
218       - Fix inline methods to work with corrected predicate
219         behavior (groditi)
220
221     * Moose::Meta::Method::Constructor
222       - Added support for lazy_build option (groditi)
223
224     * t/
225       - tests for builder and lazy_build (groditi)
226
227     * fixing some misc. bits in the docs that
228       got mentioned on CPAN Forum & perlmonks
229
230     * Moose::Meta::Role
231       - fixed how required methods are handled
232         when they encounter overriden or modified
233         methods from a class (thanks to confound).
234         - added tests for this
235
236     * Moose::Util::TypeConstraint
237       - fixed the type notation parser so that
238         the | always creates a union and so is
239         no longer a valid type char (thanks to
240         konobi, mugwump and #moose for working
241         this one out.)
242         - added more tests for this
243
244 0.26 Thurs. Sept. 27, 2007
245     == New Features ==
246
247     * Parameterized Types
248       We now support parameterized collection types, such as:
249           ArrayRef[Int]    # array or integers
250           HashRef[Object]  # a hash with object values
251       They can also be nested:
252           ArrayRef[HashRef[RegExpr]] # an array of hashes with regexpr values
253       And work with the type unions as well:
254           ArrayRef[Int | Str]  # array of integers of strings
255
256     * Better Framework Extendability
257       Moose.pm is now "extendable" such that it is now much
258       easier to extend the framework and add your own keywords
259       and customizations. See the "EXTENDING AND EMBEDDING MOOSE"
260       section of the Moose.pm docs.
261
262     * Moose Snacks!
263       In an effort to begin documenting some of the various
264       details of Moose as well as some common idioms, we have
265       created Moose::Cookbook::Snacks as a place to find
266       small (easily digestable) nuggets of Moose code.
267
268     ====
269     ~ Several doc updates/cleanup thanks to castaway ~
270
271     - converted build system to use Module::Install instead of
272       Module::Build (thanks to jrockway)
273
274     * Moose
275       - added all the meta classes to the immutable list and
276         set it to inline the accessors
277       - fix import to allow Sub::Exporter like { into => }
278             and { into_level => } (perigrin)
279       - exposed and documented init_meta() to allow better
280             embedding and extending of Moose (perigrin)
281
282         * t/
283           - complete re-organization of the test suite
284           - added some new tests as well
285           - finally re-enabled the Moose::POOP test since
286             the new version of DBM::Deep now works again
287             (thanks rob)
288
289     * Moose::Meta::Class
290       - fixed very odd and very nasty recursion bug with
291         inner/augment (mst)
292         - added tests for this (eilara)
293
294     * Moose::Meta::Attribute
295       Moose::Meta::Method::Constructor
296       Moose::Meta::Method::Accessor
297       - fixed issue with overload::Overloaded getting called
298         on non-blessed items. (RT #29269)
299         - added tests for this
300
301     * Moose::Meta::Method::Accessor
302       - fixed issue with generated accessor code making
303         assumptions about hash based classes (thanks to dexter)
304
305     * Moose::Coookbook::Snacks
306       - these are bits of documentation, not quite as big as
307         Recipes but which have no clear place in the module docs.
308         So they are Snacks! (horray for castaway++)
309
310     * Moose::Cookbook::Recipe4
311       - updated it to use the new ArrayRef[MyType] construct
312         - updated the accompanying test as well
313
314     +++ Major Refactor of the Type Constraint system +++
315     +++       with new features added as well        +++
316
317     * Moose::Util::TypeConstraint
318       - no longer uses package variable to keep track of
319         the type constraints, now uses the an instance of
320         Moose::Meta::TypeConstraint::Registry to do it
321       - added more sophisticated type notation parsing
322         (thanks to mugwump)
323         - added tests for this
324
325     * Moose::Meta::TypeConstraint
326       - some minor adjustments to make subclassing easier
327       - added the package_defined_in attribute so that we
328         can track where the type constraints are created
329
330     * Moose::Meta::TypeConstraint::Union
331       - this is now been refactored to be a subclass of
332         Moose::Meta::TypeConstraint
333
334     * Moose::Meta::TypeCoercion::Union
335       - this has been added to service the newly refactored
336         Moose::Meta::TypeConstraint::Union and is itself
337         a subclass of Moose::Meta::TypeCoercion
338
339     * Moose::Meta::TypeConstraint::Parameterized
340       - added this module (taken from MooseX::AttributeHelpers)
341         to help construct nested collection types
342         - added tests for this
343
344     * Moose::Meta::TypeConstraint::Registry
345       - added this class to keep track of type constraints
346
347 0.25 Mon. Aug. 13, 2007
348     * Moose
349       - Documentation update to reference Moose::Util::TypeConstraints
350         under 'isa' in 'has' for how to define a new type
351         (thanks to shlomif).
352
353     * Moose::Meta::Attribute
354       - required attributes now will no longer accept undef
355         from the constructor, even if there is a default and lazy
356         - added tests for this
357       - default subroutines must return a value which passes the
358         type constraint
359         - added tests for this
360
361     * Moose::Meta::Attribute
362     * Moose::Meta::Method::Constructor
363     * Moose::Meta::Method::Accessor
364       - type-constraint tests now handle overloaded objects correctly
365         in the error message
366         - added tests for this (thanks to EvanCarroll)
367
368     * Moose::Meta::TypeConstraint::Union
369       - added (has_)hand_optimized_constraint to this class so that
370         it behaves as the regular Moose::Meta::TypeConstraint does.
371
372     * Moose::Meta::Role
373       - large refactoring of this code
374       - added several more tests
375         - tests for subtle conflict resolition issues
376           added, but not currently running
377           (thanks to kolibre)
378
379     * Moose::Cookbook::Recipe7
380       - added new recipe for augment/inner functionality
381         (still in progress)
382         - added test for this
383
384     * Moose::Spec::Role
385       - a formal definition of roles (still in progress)
386
387     * Moose::Util
388       - utilities for easier working with Moose classes
389         - added tests for these
390
391     * Test::Moose
392       - This contains Moose specific test functions
393         - added tests for these
394
395 0.24 Tues. July 3, 2007
396     ~ Some doc updates/cleanup ~
397
398     * Moose::Meta::Attribute
399       - added support for roles to be given as parameters
400         to the 'handles' option.
401         - added tests and docs for this
402       - the has '+foo' attribute form now accepts changes to
403         the lazy option, and the addition of a handles option
404         (but not changing the handles option)
405         - added tests and docs for this
406
407     * Moose::Meta::Role
408       - required methods are now fetched using find_method_by_name
409         so that required methods can come from superclasses
410         - adjusted tests for this
411
412 0.23 Mon. June 18, 2007
413     * Moose::Meta::Method::Constructor
414       - fix inlined constructor for hierarchy with multiple BUILD methods (mst)
415     * Moose::Meta::Class
416       - Modify make_immutable to work with the new Class::MOP immutable
417         mechanism + POD + very basic test (groditi)
418     * Moose::Meta::Attribute
419       - Fix handles to use goto() so that caller() comes out properly on
420         the other side (perigrin)
421
422 0.22 Thurs. May 31, 2007
423     * Moose::Util::TypeConstraints
424       - fix for prototype undeclared issue when Moose::Util::TypeConstraints
425         loaded before consumers (e.g. Moose::Meta::Attribute) by predeclaring
426         prototypes for functions
427       - added the ClassName type constraint, this checks for strings
428         which will respond true to ->isa(UNIVERSAL).
429         - added tests and docs for this
430       - subtyping just in name now works correctly by making the
431         default for where be { 1 }
432         - added test for this
433
434     * Moose::Meta::Method::Accessor
435       - coerce and lazy now work together correctly, thanks to
436         merlyn for finding this bug
437         - tests added for this
438       - fix reader presedence bug in Moose::Meta::Attribute + tests
439
440     * Moose::Object
441       - Foo->new(undef) now gets ignored, it is assumed you meant to pass
442         a HASH-ref and missed. This produces better error messages then
443         having it die cause undef is not a HASH.
444         - added tests for this
445
446 0.21 Thursday, May 2nd, 2007
447     * Moose
448       - added SUPER_SLOT and INNER_SLOT class hashes to support unimport
449       - modified unimport to remove super and inner along with the rest
450         - altered unimport tests to handle this
451
452     * Moose::Role
453       - altered super export to populate SUPER_SLOT
454
455     * Moose::Meta::Class
456       - altered augment and override modifier application to use *_SLOT
457         - modified tests for these to unimport one test class each to test
458
459     * Moose::Meta::Role
460       - fixed issue where custom attribute metaclasses
461         where not handled correctly in roles
462         - added tests for this
463
464     * Moose::Meta::Class
465       - fixed issue where extending metaclasses with
466         roles would blow up. Thanks to Aankhen`` for
467         finding this insidious error, and it's solution.
468
469     ~~ lots of spelling and grammer fixes in the docs,
470        many many thanks to rlb3 and Aankhen for these :)
471
472 0.20 Friday, April 6th, 2007
473     >> I messed up the SKIP logic in one test
474        so this release is just to fix that.
475
476     * Moose
477       - 'has' now also accepts an ARRAY ref
478         to create multiple attrs (see docs)
479         (thanks to konobi for this)
480          - added tests and docs
481
482 0.19 Thurs. April 5th, 2007
483     ~~ More documentation updates ~~
484
485     * Moose::Util::TypeConstraints
486       - 'type' now supports messages as well
487         thanks to phaylon for finding this
488         - added tests for this
489       - added &list_all_type_constraints and
490         &list_all_builtin_type_constraints
491         functions to facilitate introspection.
492
493     * Moose::Meta::Attribute
494       - fixed regexp 'handles' declarations
495         to build the list of delegated methods
496         correctly (and not override important
497         things like &new) thanks to ashleyb
498         for finding this
499         - added tests and docs for this
500       - added the 'documentation' attributes
501         so that you can actually document your
502         attributes and inspect them through the
503         meta-object.
504         - added tests and docs for this
505
506     * Moose::Meta::Class
507       - when loading custom attribute metaclasses
508         it will first look in for the class in the
509         Moose::Meta::Attribute::Custom::$name, and
510         then default to just loading $name.
511         - added tests and docs for this
512
513     * Moose::Meta::TypeConstraint
514       - type constraints now stringify to their names.
515         - added test for this
516
517     * misc.
518       - added tests to assure we work with Module::Refresh
519       - added stricter test skip logic in the Moose POOP
520         test, ask Rob Kinyon why.
521         - *cough* DBM::Deep 1.0 backwards compatability sucks *cough* ;)
522
523 0.18 Sat. March 10, 2007
524     ~~ Many, many documentation updates ~~
525
526     * misc.
527       - We now use Class::MOP::load_class to
528         load all classes.
529       - added tests to show types and subtypes
530         working with Declare::Constraints::Simple
531         and Test::Deep as constraint engines.
532
533 0.18_001
534     !! You must have Class::MOP 0.37_001  !!
535     !! for this developer release to work !!
536
537     This release was primarily adding the immutable
538     feature to Moose. An immutable class is one which
539     you promise not to alter. When you set the class
540     as immutable it will perform various bits of
541     memoization and inline certain part of the code
542     (constructors, destructors and accessors). This
543     minimizes (and in some cases totally eliminates)
544     one of Moose's biggest performance hits. This
545     feature is not on by default, and is 100% optional.
546     It has several configurable bits as well, so you
547     can pick and choose to your specific needs.
548
549     The changes involved in this were fairly wide and
550     highly specific, but 100% backwards compatible, so
551     I am not going to enumerate them here. If you are
552     truely interested in what was changed, please do
553     a diff :)
554
555 0.17 Tues. Nov. 14, 2006
556     * Moose::Meta::Method::Accessor
557       - bugfix for read-only accessors which
558         are have a type constraint and lazy.
559         Thanks to chansen for finding it.
560
561 0.16 Tues. Nov. 14, 2006
562     ++ NOTE ++
563     There are some speed improvements in this release,
564     but they are only the begining, so stay tuned.
565
566     * Moose::Object
567       - BUILDALL and DEMOLISHALL no longer get
568         called unless they actually need to be.
569         This gave us a signifigant speed boost
570         for the cases when there is no BUILD or
571         DEMOLISH method present.
572
573     * Moose::Util::TypeConstraints
574     * Moose::Meta::TypeConstraint
575       - added an 'optimize_as' option to the
576         type constraint, which allows for a
577         hand optimized version of the type
578         constraint to be used when possible.
579       - Any internally created type constraints
580         now provide an optimized version as well.
581
582 0.15 Sun. Nov. 5, 2006
583     ++ NOTE ++
584     This version of Moose *must* have Class::MOP 0.36 in order
585     to work correctly. A number of small internal tweaks have
586     been made in order to be compatible with that release.
587
588     * Moose::Util::TypeConstraints
589       - added &unimport so that you can clean out
590         your class namespace of these exported
591         keywords
592
593     * Moose::Meta::Class
594       - fixed minor issue which occasionally
595         comes up during global destruction
596         (thanks omega)
597       - moved Moose::Meta::Method::Overriden into
598         its own file.
599
600     * Moose::Meta::Role
601       - moved Moose::Meta::Role::Method into
602         its own file.
603
604     * Moose::Meta::Attribute
605       - changed how we do type checks so that
606         we reduce the overall cost, but still
607         retain correctness.
608        *** API CHANGE ***
609       - moved accessor generation methods to
610         Moose::Meta::Method::Accessor to
611         conform to the API changes from
612         Class::MOP 0.36
613
614     * Moose::Meta::TypeConstraint
615       - changed how constraints are compiled
616         so that we do less recursion and more
617         iteration. This makes the type check
618         faster :)
619       - moved Moose::Meta::TypeConstraint::Union
620         into its own file
621
622     * Moose::Meta::Method::Accessor
623       - created this from methods formerly found in
624         Moose::Meta::Attribute
625
626     * Moose::Meta::Role::Method
627       - moved this from Moose::Meta::Role
628
629     * Moose::Meta::Method::Overriden
630       - moved this from Moose::Meta::Class
631
632     * Moose::Meta::TypeConstraint::Union
633       - moved this from Moose::Meta::TypeConstraint
634
635 0.14 Mon. Oct. 9, 2006
636
637     * Moose::Meta::Attribute
638       - fixed lazy attributes which were not getting
639         checked with the type constraint (thanks ashley)
640         - added tests for this
641       - removed the over-enthusiastic DWIMery of the
642         automatic ArrayRef and HashRef defaults, it
643         broke predicates in an ugly way.
644         - removed tests for this
645
646 0.13 Sat. Sept. 30, 2006
647     ++ NOTE ++
648     This version of Moose *must* have Class::MOP 0.35 in order
649     to work correctly. A number of small internal tweaks have
650     been made in order to be compatible with that release.
651
652     * Moose
653       - Removed the use of UNIVERSAL::require to be a better
654         symbol table citizen and remove a dependency
655         (thanks Adam Kennedy)
656
657       **~~ removed experimental & undocumented feature ~~**
658       - commented out the 'method' and 'self' keywords, see the
659         comments for more info.
660
661     * Moose::Cookbook
662       - added a FAQ and WTF files to document frequently
663         asked questions and common problems
664
665     * Moose::Util::TypeConstraints
666       - added GlobRef and FileHandle type constraint
667         - added tests for this
668
669     * Moose::Meta::Attribute
670       - if your attribute 'isa' ArrayRef of HashRef, and you have
671         not explicitly set a default, then make the default DWIM.
672         This will also work for subtypes of ArrayRef and HashRef
673         as well.
674       - you can now auto-deref subtypes of ArrayRef or HashRef too.
675         - new test added for this (thanks to ashley)
676
677     * Moose::Meta::Role
678       - added basic support for runtime role composition
679         but this is still *highly experimental*, so feedback
680         is much appreciated :)
681         - added tests for this
682
683     * Moose::Meta::TypeConstraint
684       - the type constraint now handles the coercion process
685         through delegation, this is to support the coercion
686         of unions
687
688     * Moose::Meta::TypeConstraint::Union
689       - it is now possible for coercions to be performed
690         on a type union
691         - added tests for this (thanks to konobi)
692
693     * Moose::Meta::TypeCoercion
694       - properly capturing error when type constraint
695         is not found
696
697     * Build.PL
698       - Scalar::Util 1.18 is bad on Win32, so temporarily
699         only require version 1.17 for Win32 and cygwin.
700         (thanks Adam Kennedy)
701
702 0.12 Sat. Sept. 1, 2006
703     * Moose::Cookbook
704       - Recipe5 (subtypes & coercion) has been written
705
706     * Moose
707       - fixed "bad meta" error message to be more descriptive
708       - fixed &unimport to not remove the &inner and &super
709         keywords because we need to localize them.
710       - fixed number of spelling/grammer issues, thanks Theory :)
711
712       **~~ experimental & undocumented feature ~~**
713       - added the method and self keywords, they are basically
714         just sugar, and they may not stay around.
715
716     * Moose::Object
717       - added &dump method to easily Data::Dumper
718         an object
719
720     * Moose::Meta::TypeConstraint
721       - added the &is_a_type_of method to check both the current
722         and the subtype of a method (similar to &isa with classes)
723
724     * Moose::Meta::Role
725       - this is now a subclass of Class::MOP::Module, and no longer
726         creates the _role_meta ugliness of before.
727         - fixed tests to reflect this change
728
729 0.11 Wed. July 12, 2006
730     * Moose
731       - added an &unimport method to remove all the keywords
732         that Moose will import, simply add 'no Moose' to the
733         bottom of your class file.
734
735     * t/
736       - fixed some test failures caused by a forgotten test
737         dependency.
738
739 0.10 Thurs. July 6, 2006
740     * Moose
741       - improved error message when loading modules so
742         it is less confusing when you load a role.
743       - added &calculate_all_roles method to
744         Moose::Meta::Class and Moose::Meta::Role
745
746     NOTE:
747     This module has been tested against Class::MOP 0.30
748     but it does not yet utilize the optimizations
749     it makes available. Stay tuned for that ;)
750
751 0.09_03 Fri. June 23, 2006
752     ++ DEVELOPER RELEASE ++
753     * Moose
754       - 'use strict' and 'use warnings' are no longer
755          needed in Moose classes, Moose itself will
756          turn them on for you.
757          - added tests for this
758       - moved code from exported subs to private methods
759         in Moose::Meta::Class
760
761     * Moose::Role
762       - as with Moose, strict and warnings are
763         automatically turned on for you.
764          - added tests for this
765
766     * Moose::Meta::Role
767       - now handles an edge case for override errors
768         - added tests for this
769       - added some more edge case tests
770
771 0.09_02 Tues. May 16, 2006
772     ++ DEVELOPER RELEASE ++
773     * Moose
774       - added prototypes to the exported subs
775       - updated docs
776
777     * Moose::Role
778       - added prototypes to the exported subs
779       - updated docs
780
781     * Moose::Util::TypeConstraints
782       - cleaned up prototypes for the subs
783       - updated docs
784
785 0.09_01 Fri. May 12, 2006
786     ++ DEVELOPER RELEASE ++
787       - This release works in combination with
788         Class::MOP 0.29_01, it is a developer
789         release because it uses the a new
790         instance sub-protocol and a fairly
791         complete Role implementation. It has
792         not yet been optimized, so it slower
793         the the previous CPAN version. This
794         release also lacks good updated docs,
795         the official release will have updated docs.
796
797     * Moose
798       - refactored the keyword exports
799         - 'with' now checks Role validaity and
800           accepts more than one Role at a time
801         - 'extends' makes metaclass adjustments as
802            needed to ensure metaclass compatability
803
804     * Moose::Role
805       - refactored the keyword exports
806         - 'with' now checks Role validaity and
807           accepts more than one Role at a time
808
809     * Moose::Util::TypeConstraints
810       - added the 'enum' keyword for simple
811         string enumerations which can be used as
812         type constraints
813         - see example of usage in t/202_example.t
814
815     * Moose::Object
816       - more careful checking of params to new()
817
818     * Moose::Meta::Role
819       - much work done on the role composition
820         - many new tests for conflict detection
821           and composition edge cases
822         - not enough documentation, I suggest
823           looking at the tests
824
825     * Moose::Meta::Instance
826       - added new Instance metaclass to support
827         the new Class::MOP instance protocol
828
829     * Moose::Meta::Class
830       - some small changes to support the new
831         instance protocol
832       - some small additions to support Roles
833
834     * Moose::Meta::Attribute
835       - some improvements to the accessor generation code
836         by nothingmuch
837       - some small changes to support the new
838         instance protocol
839       - (still somewhat) experimental delegation support
840         with the 'handles' option
841         - added several tests for this
842         - no docs for this yet
843
844 0.05 Thurs. April 27, 2006
845     * Moose
846       - keywords are now exported with Sub::Exporter
847         thanks to chansen for this commit
848       - has keyword now takes a 'metaclass' option
849         to support custom attribute meta-classes
850         on a per-attribute basis
851         - added tests for this
852       - the 'has' keyword not accepts inherited slot
853         specifications (has '+foo'). This is still an
854         experimental feature and probably not finished
855         see t/038_attribute_inherited_slot_specs.t for
856         more details, or ask about it on #moose
857         - added tests for this
858
859     * Moose::Role
860       - keywords are now exported with Sub::Exporter
861
862     * Moose::Utils::TypeConstraints
863       - reorganized the type constraint hierarchy, thanks
864         to nothingmuch and chansen for his help and advice
865         on this
866         - added some tests for this
867       - keywords are now exported with Sub::Exporter
868         thanks to chansen for this commit
869
870     * Moose::Meta::Class
871       - due to changes in Class::MOP, we had to change
872         construct_instance (for the better)
873
874     * Moose::Meta::Attribute
875       - due to changes in Class::MOP, we had to add the
876         initialize_instance_slot method (it's a good thing)
877
878     * Moose::Meta::TypeConstraint
879       - added type constraint unions
880         - added tests for this
881       - added the is_subtype_of predicate method
882         - added tests for this
883
884 0.04 Sun. April 16th, 2006
885     * Moose::Role
886       - Roles can now consume other roles
887         - added tests for this
888       - Roles can specify required methods now with
889         the requires() keyword
890         - added tests for this
891
892     * Moose::Meta::Role
893       - ripped out much of it's guts ,.. much cleaner now
894       - added required methods and correct handling of
895         them in apply() for both classes and roles
896         - added tests for this
897       - no longer adds a does() method to consuming classes
898         it relys on the one in Moose::Object
899       - added roles attribute and some methods to support
900         roles consuming roles
901
902     * Moose::Meta::Attribute
903       - added support for triggers on attributes
904         - added tests for this
905       - added support for does option on an attribute
906         - added tests for this
907
908     * Moose::Meta::Class
909       - added support for attribute triggers in the
910         object construction
911         - added tests for this
912
913     * Moose
914       - Moose no longer creates a subtype for your class
915         if a subtype of the same name already exists, this
916         should DWIM in 99.9999% of all cases
917
918     * Moose::Util::TypeConstraints
919       - fixed bug where incorrect subtype conflicts were
920         being reported
921         - added test for this
922
923     * Moose::Object
924       - this class can now be extended with 'use base' if
925         you need it, it properly loads the metaclass class now
926         - added test for this
927
928 0.03_02 Wed. April 12, 2006
929     * Moose
930       - you must now explictly use Moose::Util::TypeConstraints
931         it no longer gets exported for you automatically
932
933     * Moose::Object
934       - new() now accepts hash-refs as well as key/value lists
935       - added does() method to check for Roles
936         - added tests for this
937
938     * Moose::Meta::Class
939       - added roles attribute along with the add_role() and
940         does_role() methods
941         - added tests for this
942
943     * Moose::Meta::Role
944       - now adds a does() method to consuming classes
945         which tests the class's hierarchy for roles
946         - added tests for this
947
948 0.03_01 Mon. April 10, 2006
949     * Moose::Cookbook
950       - added new Role recipe (no content yet, only code)
951
952     * Moose
953       - added 'with' keyword for Role support
954         - added test and docs for this
955       - fixed subtype quoting bug
956         - added test for this
957
958     * Moose::Role
959       - Roles for Moose
960         - added test and docs
961
962     * Moose::Util::TypeConstraints
963       - added the message keyword to add custom
964         error messages to type constraints
965
966     * Moose::Meta::Role
967       - the meta role to support Moose::Role
968         - added tests and docs
969
970     * Moose::Meta::Class
971       - moved a number of things from Moose.pm
972         to here, they should have been here
973         in the first place
974
975     * Moose::Meta::Attribute
976       - moved the attribute option macros here
977         instead of putting them in Moose.pm
978
979     * Moose::Meta::TypeConstraint
980       - added the message attributes and the
981         validate method
982         - added tests and docs for this
983
984 0.03 Thurs. March 30, 2006
985     * Moose::Cookbook
986       - added the Moose::Cookbook with 5 recipes,
987         describing all the stuff Moose can do.
988
989     * Moose
990       - fixed an issue with &extends super class loading
991         it now captures errors and deals with inline
992         packages correctly (bug found by mst, solution
993         stolen from alias)
994       - added super/override & inner/augment features
995         - added tests and docs for these
996
997     * Moose::Object
998       - BUILDALL now takes a reference of the %params
999         that are passed to &new, and passes that to
1000         each BUILD as well.
1001
1002     * Moose::Util::TypeConstraints
1003       - Type constraints now survive runtime reloading
1004         - added test for this
1005
1006         * Moose::Meta::Class
1007           - fixed the way attribute defaults are handled
1008             during instance construction (bug found by chansen)
1009
1010     * Moose::Meta::Attribute
1011       - read-only attributes now actually enforce their
1012         read-only-ness (this corrected in Class::MOP as
1013         well)
1014
1015 0.02 Tues. March 21, 2006
1016     * Moose
1017       - many more tests, fixing some bugs and
1018         edge cases
1019       - &extends now loads the base module with
1020         UNIVERSAL::require
1021         - added UNIVERSAL::require to the
1022           dependencies list
1023       ** API CHANGES **
1024       - each new Moose class will also create
1025         and register a subtype of Object which
1026         correspond to the new Moose class.
1027       - the 'isa' option in &has now only
1028         accepts strings, and will DWIM in
1029         almost all cases
1030
1031     * Moose::Util::TypeConstraints
1032       - added type coercion features
1033         - added tests for this
1034         - added support for this in attributes
1035           and instance construction
1036       ** API CHANGES **
1037       - type construction no longer creates a
1038         function, it registers the type instead.
1039         - added several functions to get the
1040           registered types
1041
1042     * Moose::Object
1043       - BUILDALL and DEMOLISHALL were broken
1044         because of a mis-named hash key, Whoops :)
1045
1046     * Moose::Meta::Attribute
1047       - adding support for coercion in the
1048         autogenerated accessors
1049
1050     * Moose::Meta::Class
1051       - adding support for coercion in the
1052         instance construction
1053
1054     * Moose::Meta::TypeConstraint
1055     * Moose::Meta::TypeCoercion
1056           - type constraints and coercions are now
1057             full fledges meta-objects
1058
1059 0.01 Wed. March 15, 2006
1060     - Moooooooooooooooooose!!!