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