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