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