Merge remote branch 'origin/rfc/illegal_options_for_inheritance'
[gitmo/Moose.git] / lib / Moose / Manual / Delta.pod
CommitLineData
600f7f85 1=pod
2
3=head1 NAME
4
5Moose::Manual::Delta - Important Changes in Moose
6
7=head1 DESCRIPTION
8
0f13f53c 9This documents any important or noteworthy changes in Moose, with a
10focus on backwards. This does duplicate data from the F<Changes> file,
11but aims to provide more details and when possible workarounds.
12
13Besides helping keep up with changes, you can also use this document
14for finding the lowest version of Moose that supported a given
15feature. If you encounter a problem and have a solution but don't see
16it documented here, or think we missed an important feature, please
17send us a patch.
600f7f85 18
aee0741b 19=head1 1.09
20
7dacb294 21=over 4
22
2b54d2a6 23=item You cannot pass C<< coerce => 1 >> unless the attribute's type constraint has a coercion
24
25Previously, this was accepted, and it sort of worked, except that if you
26attempted to set the attribute after the object was created, you would get a
27runtime error.
28
29Now you will get an error when you attempt to define the attribute.
30
aee0741b 31=item C<no Moose>, C<no Moose::Role>, and C<no Moose::Exporter> no longer unimport strict and warnings
32
33This change was made in 1.05, and has now been reverted. We don't know if the
34user has explicitly loaded strict or warnings outside on their own, and
35unimporting them is just broken in that case.
36
7782e1da 37=item Inversed logic when defining which options can be changed
38
39L<Moose::Meta::Attribute> now uses inversed logic when defining which
40options can be changed. By default all options are allowed to be
41changed. The previous behaviour required each option to be whitelisted
42for changing using C<legal_options_for_inheritance> method. This
43method has been removed. New method C<illegal_options_for_inheritance>
44can now be used to prevent certain options from being changeable.
45
46 package Bar::Meta::Attribute;
47 use Moose;
48
49 extends 'Moose::Meta::Attribute';
50
51 has 'my_illegal_option' => (
52 isa => 'CodeRef',
53 is => 'rw',
54 );
55
56 around illegal_options_for_inheritance => sub {
57 return (shift->(@_), qw/my_illegal_option/);
58 };
59
7dacb294 60=back
61
e462f6f3 62=head1 1.05
63
a19ae3d7 64=over 4
65
66=item L<Moose::Object/BUILD> methods are now called when calling C<new_object>
67
68Previously, C<BUILD> methods would only be called from C<Moose::Object::new>,
69but now they are also called when constructing an object via
70C<Moose::Meta::Class::new_object>. C<BUILD> methods are an inherent part of the
71object construction process, and this should make C<< $meta->new_object >>
72actually usable without forcing people to use C<< $meta->name->new >>.
73
2fee26f1 74=item C<no Moose>, C<no Moose::Role>, and C<no Moose::Exporter> now unimport strict and warnings
75
76In the interest of having C<no Moose> clean up everything that C<use Moose>
77does in the calling scope, C<no Moose> (as well as all other
78L<Moose::Exporter>-using modules) now unimports strict and warnings.
79
f46a74bf 80=item Metaclass compatibility checking and fixing should be much more robust
81
82The L<metaclass compatibility|Moose/METACLASS COMPATIBILITY AND MOOSE> checking
83and fixing algorithms have been completely rewritten, in both Class::MOP and
84Moose. This should resolve many confusing errors when dealing with non-Moose
85inheritance and with custom metaclasses for things like attributes,
918b5cef 86constructors, etc. For correct code, the only thing that should require a
87change is that custom error metaclasses must now inherit from
88L<Moose::Error::Default>.
f46a74bf 89
a19ae3d7 90=back
91
8ff79890 92=head1 1.02
93
94=over 4
95
96=item Moose::Meta::TypeConstraint::Class is_subtype_of behavior
97
98Earlier versions of L<is_subtype_of|Moose::Meta::TypeConstraint::Class/is_subtype_of>
99would incorrectly return true when called with itself, its own TC name or
100its class name as an argument. (i.e. $foo_tc->is_subtype_of('Foo') == 1) This
101behavior was a caused by C<isa> being checked before the class name. The old
102behavior can be accessed with L<is_type_of|Moose::Meta::TypeConstraint::Class/is_type_of>
103
104=back
105
12885414 106=head1 1.00
107
108=over 4
109
110=item Moose::Meta::Attribute::Native::Trait::Code no longer creates reader methods by default
111
112Earlier versions of L<Moose::Meta::Attribute::Native::Trait::Code> created
113read-only accessors for the attributes it's been applied to, even if you didn't
114ask for it with C<< is => 'ro' >>. This incorrect behaviour has now been fixed.
115
116=back
117
775666aa 118=head1 0.95
119
120=over 4
121
122=item Moose::Util add_method_modifier behavior
123
124add_method_modifier (and subsequently the sugar functions Moose::before,
125Moose::after, and Moose::around) can now accept arrayrefs, with the same
126behavior as lists. Types other than arrayref and regexp result in an error.
127
128=back
129
5b7b27e2 130=head1 0.93_01 and 0.94
131
132=over 4
133
f785aad8 134=item Moose::Util::MetaRole API has changed
135
136The C<apply_metaclass_roles> function is now called C<apply_metaroles>. The
137way arguments are supplied has been changed to force you to distinguish
138between metaroles applied to L<Moose::Meta::Class> (and helpers) versus
139L<Moose::Meta::Role>.
140
141The old API still works, but will warn in a future release, and eventually be
142removed.
143
144=item Moose::Meta::Role has real attributes
145
146The attributes returned by L<Moose::Meta::Role> are now instances of the
147L<Moose::Meta::Role::Attribute> class, instead of bare hash references.
148
5b7b27e2 149=item "no Moose" now removes C<blessed> and C<confess>
150
151Moose is now smart enough to know exactly what it exported, even when it
152re-exports functions from other packages. When you unimport Moose, it will
153remove these functions from your namespace unless you I<also> imported them
154directly from their respective packages.
155
156If you have a C<no Moose> in your code I<before> you call C<blessed> or
157C<confess>, your code will break. You can either move the C<no Moose> call
158later in your code, or explicitly import the relevant functions from the
159packages that provide them.
160
161=item L<Moose::Exporter> is smarter about unimporting re-exports
162
163The change above comes from a general improvement to L<Moose::Exporter>. It
164will now unimport any function it exports, even if that function is a
165re-export from another package.
166
f427b505 167=item Attributes in roles can no longer override class attributes with "+foo"
168
169Previously, this worked more or less accidentally, because role attributes
170weren't objects. This was never documented, but a few MooseX modules took
171advantage of this.
172
173=item The composition_class_roles attribute in L<Moose::Meta::Role> is now a method
174
175This was done to make it possible for roles to alter the the list of
176composition class roles by applying a method modifiers. Previously, this was
177an attribute and MooseX modules override it. Since that no longer works, this
178was made a method.
179
180This I<should> be an attribute, so this may switch back to being an attribute
181in the future if we can figure out how to make this work.
182
5b7b27e2 183=back
184
c378a61a 185=head1 0.93
186
187=over 4
188
189=item Calling $object->new() is no longer deprecated
190
76c89056 191We decided to undeprecate this. Now it just works.
c378a61a 192
d99ec58b 193=item Both C<get_method_map> and C<get_attribute_map> is deprecated
fa6da135 194
d99ec58b 195These metaclass methods were never meant to be public, and they are both now
196deprecated. The work around if you still need the functionality they provided
197is to iterate over the list of names manually.
fa6da135 198
199 my %fields = map { $_ => $meta->get_attribute($_) } $meta->get_attribute_list;
200
d99ec58b 201This was actually a change in L<Class::MOP>, but this version of Moose
202requires a version of L<Class::MOP> that includes said change.
203
c378a61a 204=back
205
b98ef150 206=head1 0.90
871f82f8 207
c985327a 208=over 4
209
93ef4ba1 210=item Added Native delegation for Code refs
211
212See L<Moose::Meta::Attribute::Native::Trait::Code> for details.
213
3f5ff7d0 214=item Calling $object->new() is deprecated
215
216Moose has long supported this, but it's never really been documented, and we
217don't think this is a good practice. If you want to construct an object from
218an existing object, you should provide some sort of alternate constructor like
219C<< $object->clone >>.
220
221Calling C<< $object->new >> now issues a warning, and will be an error in a
222future release.
223
19e60fdd 224=item Moose no longer warns if you call C<make_immutable> for a class with mutable ancestors
225
226While in theory this is a good thing to warn about, we found so many
227exceptions to this that doing this properly became quite problematic.
228
93ef4ba1 229=back
230
231=head1 Version 0.89_02
232
233=over 4
4f0d4488 234
871f82f8 235=item New Native delegation methods from L<List::Util> and L<List::MoreUtils>
236
237In particular, we now have C<reduce>, C<shuffle>, C<uniq>, and C<natatime>.
238
3023f1e4 239=item The Moose::Exporter with_caller feature is now deprecated
240
241Use C<with_meta> instead. The C<with_caller> option will start warning in a
242future release.
243
9b9a5a07 244=item Moose now warns if you call C<make_immutable> for a class with mutable ancestors
245
246This is dangerous because modifying a class after a subclass has been
90b20bd6 247immutabilized will lead to incorrect results in the subclass, due to inlining,
9b9a5a07 248caching, etc. This occasionally happens accidentally, when a class loads one
249of its subclasses in the middle of its class definition, so pointing out that
250this may cause issues should be helpful. Metaclasses (classes that inherit
251from L<Class::MOP::Object>) are currently exempt from this check, since at the
90b20bd6 252moment we aren't very consistent about which metaclasses we immutabilize.
9b9a5a07 253
bce5d4a5 254=item C<enum> and C<duck_type> now take arrayrefs for all forms
255
256Previously, calling these functions with a list would take the first element of
257the list as the type constraint name, and use the remainder as the enum values
258or method names. This makes the interface inconsistent with the anon-type forms
259of these functions (which must take an arrayref), and a free-form list where
260the first value is sometimes special is hard to validate (and harder to give
261reasonable error messages for). These functions have been changed to take
262arrayrefs in all their forms - so, C<< enum 'My::Type' => [qw(foo bar)] >> is
263now the preferred way to create an enum type constraint. The old syntax still
264works for now, but it will hopefully be deprecated and removed in a future
265release.
266
871f82f8 267=back
268
4ada9618 269=head1 Version 0.89_01
a3d98218 270
af44c00c 271L<Moose::Meta::Attribute::Native> has been moved into the Moose core from
a3d98218 272L<MooseX::AttributeHelpers>. Major changes include:
273
ebaaa391 274=over 4
a3d98218 275
276=item C<traits>, not C<metaclass>
277
93ced2bd 278Method providers are only available via traits.
a3d98218 279
280=item C<handles>, not C<provides> or C<curries>
281
93ced2bd 282The C<provides> syntax was like core Moose C<< handles => HASHREF >>
283syntax, but with the keys and values reversed. This was confusing,
284and AttributeHelpers now uses C<< handles => HASHREF >> in a way that
285should be intuitive to anyone already familiar with how it is used for
286other attributes.
a3d98218 287
93ced2bd 288The C<curries> functionality provided by AttributeHelpers has been
289generalized to apply to all cases of C<< handles => HASHREF >>, though
290not every piece of functionality has been ported (currying with a
291CODEREF is not supported).
a3d98218 292
1853a27e 293=item C<empty> is now C<is_empty>, and means empty, not non-empty
af44c00c 294
295Previously, the C<empty> method provided by Arrays and Hashes returned true if
296the attribute was B<not> empty (no elements). Now it returns true if the
1853a27e 297attribute B<is> empty. It was also renamed to C<is_empty>, to reflect this.
af44c00c 298
9a14bd29 299=item C<find> was renamed to C<first>, and C<first> and C<last> were removed
28b96142 300
301L<List::Util> refers to the functionality that we used to provide under C<find>
302as L<first|List::Util/first>, so that will likely be more familiar (and will
9a14bd29 303fit in better if we decide to add more List::Util functions). C<first> and
304C<last> were removed, since their functionality is easily duplicated with
305curries of C<get>.
28b96142 306
307=item Helpers that take a coderef of one argument now use C<$_>
308
309Subroutines passed as the first argument to C<first>, C<map>, and C<grep> now
310receive their argument in C<$_> rather than as a parameter to the subroutine.
311Helpers that take a coderef of two or more arguments remain using the argument
312list (there are technical limitations to using C<$a> and C<$b> like C<sort>
313does).
314
af44c00c 315See L<Moose::Meta::Attribute::Native> for the new documentation.
a3d98218 316
ebaaa391 317=back
318
85e2b15a 319The C<alias> and C<excludes> role parameters have been renamed to C<-alias>
320and C<-excludes>. The old names still work, but new code should use the new
321names, and eventually the old ones will be deprecated and removed.
322
4ada9618 323=head1 Version 0.89
324
8a8856de 325C<< use Moose -metaclass => 'Foo' >> now does alias resolution, just like
326C<-traits> (and the C<metaclass> and C<traits> options to C<has>).
327
27f2f43f 328Added two functions C<meta_class_alias> and C<meta_attribute_alias> to
329L<Moose::Util>, to simplify aliasing metaclasses and metatraits. This is
330a wrapper around the old
331
332 package Moose::Meta::Class::Custom::Trait::FooTrait;
333 sub register_implementation { 'My::Meta::Trait' }
334
335way of doing this.
336
4831e2de 337=head1 Version 0.84
338
9f52cce5 339When an attribute generates I<no> accessors, we now warn. This is to help
340users who forget the C<is> option. If you really do not want any accessors,
3de02fd8 341you can use C<< is => 'bare' >>. You can maintain back compat with older
342versions of Moose by using something like:
343
344 ($Moose::VERSION >= 0.84 ? is => 'bare' : ())
9f52cce5 345
346When an accessor overwrites an existing method, we now warn. To work around
347this warning (if you really must have this behavior), you can explicitly
348remove the method before creating it as an accessor:
349
350 sub foo {}
351
352 __PACKAGE__->meta->remove_method('foo');
353
354 has foo => (
355 is => 'ro',
356 );
357
358When an unknown option is passed to C<has>, we now warn. You can silence
359the warning by fixing your code. :)
360
4831e2de 361The C<Role> type has been deprecated. On its own, it was useless,
362since it just checked C<< $object->can('does') >>. If you were using
363it as a parent type, just call C<role_type('Role::Name')> to create an
364appropriate type instead.
365
7d6b451f 366=head1 Version 0.78
367
368C<use Moose::Exporter;> now imports C<strict> and C<warnings> into packages
369that use it.
370
c3fdacda 371=head1 Version 0.77
372
373C<DEMOLISHALL> and C<DEMOLISH> now receive an argument indicating whether or
374not we are in global destruction.
375
00c61603 376=head1 Version 0.76
377
9f0b3b64 378Type constraints no longer run coercions for a value that already matches the
379constraint. This may affect some (arguably buggy) edge case coercions that
380rely on side effects in the C<via> clause.
381
f869fc4a 382=head1 Version 0.75
383
384L<Moose::Exporter> now accepts the C<-metaclass> option for easily
385overriding the metaclass (without L<metaclass>). This works for classes
386and roles.
387
39ab7714 388=head1 Version 0.74
389
85cf0647 390Added a C<duck_type> sugar function to L<Moose::Util::TypeConstraints>
391to make integration with non-Moose classes easier. It simply checks if
392C<< $obj->can() >> a list of methods.
39ab7714 393
612fd754 394A number of methods (mostly inherited from L<Class::MOP>) have been
395renamed with a leading underscore to indicate their internal-ness. The
396old method names will still work for a while, but will warn that the
397method has been renamed. In a few cases, the method will be removed
398entirely in the future. This may affect MooseX authors who were using
399these methods.
400
600f7f85 401=head1 Version 0.73
402
0f13f53c 403Calling C<subtype> with a name as the only argument now throws an
600f7f85 404exception. If you want an anonymous subtype do:
405
406 my $subtype = subtype as 'Foo';
407
0f13f53c 408This is related to the changes in version 0.71_01.
600f7f85 409
501db4e6 410The C<is_needed> method in L<Moose::Meta::Method::Destructor> is now
411only usable as a class method. Previously, it worked as a class or
412object method, with a different internal implementation for each
413version.
414
415The internals of making a class immutable changed a lot in Class::MOP
4160.78_02, and Moose's internals have changed along with it. The
417external C<< $metaclass->make_immutable >> method still works the same
418way.
419
600f7f85 420=head1 Version 0.72
421
0f13f53c 422A mutable class accepted C<< Foo->new(undef) >> without complaint,
423while an immutable class would blow up with an unhelpful error. Now,
424in both cases we throw a helpful error instead.
600f7f85 425
0f13f53c 426This "feature" was originally added to allow for cases such as this:
600f7f85 427
428 my $args;
0f13f53c 429
430 if ( something() ) {
431 $args = {...};
600f7f85 432 }
0f13f53c 433
600f7f85 434 return My::Class->new($args);
435
0f13f53c 436But we decided this is a bad idea and a little too magical, because it
437can easily mask real errors.
600f7f85 438
439=head1 Version 0.71_01
440
0f13f53c 441Calling C<type> or C<subtype> without the sugar helpers (C<as>,
442C<where>, C<message>) is now deprecated.
443
444As a side effect, this meant we ended up using Perl prototypes on
445C<as>, and code like this will no longer work:
600f7f85 446
447 use Moose::Util::TypeConstraints;
448 use Declare::Constraints::Simple -All;
0f13f53c 449
450 subtype 'ArrayOfInts'
600f7f85 451 => as 'ArrayRef'
452 => IsArrayRef(IsInt);
453
454Instead it must be changed to this:
455
0f13f53c 456 subtype(
457 'ArrayOfInts' => {
458 as => 'ArrayRef',
459 where => IsArrayRef(IsInt)
460 }
600f7f85 461 );
462
0f13f53c 463If you want to maintain backwards compat with older versions of Moose,
464you must explicitly test Moose's C<VERSION>:
600f7f85 465
0f13f53c 466 if ( Moose->VERSION < 0.71_01 ) {
467 subtype 'ArrayOfInts'
600f7f85 468 => as 'ArrayRef'
469 => IsArrayRef(IsInt);
470 }
471 else {
0f13f53c 472 subtype(
473 'ArrayOfInts' => {
474 as => 'ArrayRef',
475 where => IsArrayRef(IsInt)
476 }
600f7f85 477 );
478 }
479
480=head1 Version 0.70
481
0f13f53c 482We no longer pass the meta-attribute object as a final argument to
483triggers. This actually changed for inlined code a while back, but the
484non-inlined version and the docs were still out of date.
485
486If by some chance you actually used this feature, the workaround is
487simple. You fetch the attribute object from out of the C<$self>
488that is passed as the first argument to trigger, like so:
489
490 has 'foo' => (
491 is => 'ro',
492 isa => 'Any',
493 trigger => sub {
494 my ( $self, $value ) = @_;
495 my $attr = $self->meta->find_attribute_by_name('foo');
496
497 # ...
498 }
499 );
600f7f85 500
501=head1 Version 0.66
502
0f13f53c 503If you created a subtype and passed a parent that Moose didn't know
504about, it simply ignored the parent. Now it automatically creates the
505parent as a class type. This may not be what you want, but is less
506broken than before.
600f7f85 507
0f13f53c 508You could declare a name with subtype such as "Foo!Bar". Moose would
509accept this allowed, but if you used it in a parameterized type such
510as "ArrayRef[Foo!Bar]" it wouldn't work. We now do some vetting on
511names created via the sugar functions, so that they can only contain
512alphanumerics, ":", and ".".
600f7f85 513
514=head1 Version 0.65
515
516Methods created via an attribute can now fulfill a C<requires>
0f13f53c 517declaration for a role. Honestly we don't know why Stevan didn't make
518this work originally, he was just insane or something.
600f7f85 519
0f13f53c 520Stack traces from inlined code will now report the line and file as
521being in your class, as opposed to in Moose guts.
600f7f85 522
523=head1 Version 0.62_02
524
0f13f53c 525When a class does not provide all of a role's required methods, the
526error thrown now mentions all of the missing methods, as opposed to
527just the first missing method.
600f7f85 528
0f13f53c 529Moose will no longer inline a constructor for your class unless it
5e26e3f2 530inherits its constructor from Moose::Object, and will warn when it
531doesn't inline. If you want to force inlining anyway, pass
b84f64da 532C<< replace_constructor => 1 >> to C<make_immutable>.
0f13f53c 533
534If you want to get rid of the warning, pass C<< inline_constructor =>
fbf7ba85 5350 >>.
600f7f85 536
537=head1 Version 0.62
538
0f13f53c 539Removed the (deprecated) C<make_immutable> keyword.
600f7f85 540
541Removing an attribute from a class now also removes delegation
0f13f53c 542(C<handles>) methods installed for that attribute. This is correct
600f7f85 543behavior, but if you were wrongly relying on it you might get bit.
544
545=head1 Version 0.58
546
0f13f53c 547Roles now add methods by calling C<add_method>, not
548C<alias_method>. They make sure to always provide a method object,
549which will be cloned internally. This means that it is now possible to
550track the source of a method provided by a role, and even follow its
551history through intermediate roles. This means that methods added by
552a role now show up when looking at a class's method list/map.
553
554Parameter and Union args are now sorted, this makes Int|Str the same
555constraint as Str|Int. Also, incoming type constraint strings are
556normalized to remove all whitespace differences. This is mostly for
557internals and should not affect outside code.
558
559L<Moose::Exporter> will no longer remove a subroutine that the
560exporting package re-exports. Moose re-exports the Carp::confess
561function, among others. The reasoning is that we cannot know whether
562you have also explicitly imported those functions for your own use, so
563we err on the safe side and always keep them.
600f7f85 564
565=head1 Version 0.56
566
0f13f53c 567C<Moose::init_meta> should now be called as a method.
600f7f85 568
0f13f53c 569New modules for extension writers, L<Moose::Exporter> and
570L<Moose::Util::MetaRole>.
600f7f85 571
572=head1 Version 0.55_01
573
574Implemented metaclass traits (and wrote a recipe for it):
575
576 use Moose -traits => 'Foo'
577
578This should make writing small Moose extensions a little
579easier.
580
581=head1 Version 0.55
582
583Fixed C<coerce> to accept anon types just like C<subtype> can.
584So that you can do:
585
586 coerce $some_anon_type => from 'Str' => via { ... };
587
588=head1 Version 0.51
589
52da380a 590Added C<BUILDARGS>, a new step in C<< Moose::Object->new() >>.
600f7f85 591
592=head1 Version 0.49
593
0f13f53c 594Fixed how the C<< is => (ro|rw) >> works with custom defined
595C<reader>, C<writer> and C<accessor> options. See the below table for
600f7f85 596details:
597
598 is => ro, writer => _foo # turns into (reader => foo, writer => _foo)
599 is => rw, writer => _foo # turns into (reader => foo, writer => _foo)
600 is => rw, accessor => _foo # turns into (accessor => _foo)
601 is => ro, accessor => _foo # error, accesor is rw
602
603=head1 Version 0.45
604
0f13f53c 605The C<before/around/after> method modifiers now support regexp
606matching of method names. NOTE: this only works for classes, it is
607currently not supported in roles, but, ... patches welcome.
600f7f85 608
0f13f53c 609The C<has> keyword for roles now accepts the same array ref form that
610L<Moose>.pm does for classes.
600f7f85 611
0f13f53c 612A trigger on a read-only attribute is no longer an error, as it's
613useful to trigger off of the constructor.
600f7f85 614
0f13f53c 615Subtypes of parameterizable types now are parameterizable types
616themselves.
600f7f85 617
618=head1 Version 0.44
619
0f13f53c 620Fixed issue where C<DEMOLISHALL> was eating the value in C<$@>, and so
621not working correctly. It still kind of eats them, but so does vanilla
622perl.
600f7f85 623
624=head1 Version 0.41
625
0f13f53c 626Inherited attributes may now be extended without restriction on the
600f7f85 627type ('isa', 'does').
628
0f13f53c 629The entire set of Moose::Meta::TypeConstraint::* classes were
630refactored in this release. If you were relying on their internals you
631should test your code carefully.
600f7f85 632
633=head1 Version 0.40
634
0f13f53c 635Documenting the use of '+name' with attributes that come from recently
636composed roles. It makes sense, people are using it, and so why not
637just officially support it.
600f7f85 638
0f13f53c 639The C<< Moose::Meta::Class->create >> method now supports roles.
600f7f85 640
86b96832 641It is now possible to make anonymous enum types by passing C<enum> an
642array reference instead of the C<< enum $name => @values >>.
600f7f85 643
644=head1 Version 0.37
645
0f13f53c 646Added the C<make_immutable> keyword as a shortcut to calling
647C<make_immutable> on the meta object. This eventually got removed!
600f7f85 648
0f13f53c 649Made C<< init_arg => undef >> work in Moose. This means "do not accept
600f7f85 650a constructor parameter for this attribute".
651
0f13f53c 652Type errors now use the provided message. Prior to this release they
653didn't.
600f7f85 654
655=head1 Version 0.34
656
657Moose is now a postmodern object system :)
658
0f13f53c 659The Role system was completely refactored. It is 100% backwards
660compat, but the internals were totally changed. If you relied on the
661internals then you are advised to test carefully.
600f7f85 662
663Added method exclusion and aliasing for Roles in this release.
664
0f13f53c 665Added the L<Moose::Util::TypeConstraints::OptimizedConstraints>
666module.
600f7f85 667
0f13f53c 668Passing a list of values to an accessor (which is only expecting one
669value) used to be silently ignored, now it throws an error.
600f7f85 670
671=head1 Version 0.26
672
0f13f53c 673Added parameterized types and did a pretty heavy refactoring of the
674type constraint system.
600f7f85 675
0f13f53c 676Better framework extendability and better support for "making your own
677Moose".
600f7f85 678
679=head1 Version 0.25 or before
680
0f13f53c 681Honestly, you shouldn't be using versions of Moose that are this old,
682so many bug fixes and speed improvements have been made you would be
683crazy to not upgrade.
600f7f85 684
0f13f53c 685Also, I am tired of going through the Changelog so I am stopping here,
686if anyone would like to continue this please feel free.
600f7f85 687
688=head1 AUTHOR
689
690Stevan Little E<lt>stevan@iinteractive.comE<gt>
691
692=head1 COPYRIGHT AND LICENSE
693
694Copyright 2009 by Infinity Interactive, Inc.
695
696L<http://www.iinteractive.com>
697
698This library is free software; you can redistribute it and/or modify
699it under the same terms as Perl itself.
700
0f13f53c 701=cut