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