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