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