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