Separate changes in 0.89 from those in 0.89_01
[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
4ada9618 19=head1 Version 0.89_01
a3d98218 20
af44c00c 21L<Moose::Meta::Attribute::Native> has been moved into the Moose core from
a3d98218 22L<MooseX::AttributeHelpers>. Major changes include:
23
24=over
25
26=item C<traits>, not C<metaclass>
27
93ced2bd 28Method providers are only available via traits.
a3d98218 29
30=item C<handles>, not C<provides> or C<curries>
31
93ced2bd 32The C<provides> syntax was like core Moose C<< handles => HASHREF >>
33syntax, but with the keys and values reversed. This was confusing,
34and AttributeHelpers now uses C<< handles => HASHREF >> in a way that
35should be intuitive to anyone already familiar with how it is used for
36other attributes.
a3d98218 37
93ced2bd 38The C<curries> functionality provided by AttributeHelpers has been
39generalized to apply to all cases of C<< handles => HASHREF >>, though
40not every piece of functionality has been ported (currying with a
41CODEREF is not supported).
a3d98218 42
1853a27e 43=item C<empty> is now C<is_empty>, and means empty, not non-empty
af44c00c 44
45Previously, the C<empty> method provided by Arrays and Hashes returned true if
46the attribute was B<not> empty (no elements). Now it returns true if the
1853a27e 47attribute B<is> empty. It was also renamed to C<is_empty>, to reflect this.
af44c00c 48
9a14bd29 49=item C<find> was renamed to C<first>, and C<first> and C<last> were removed
28b96142 50
51L<List::Util> refers to the functionality that we used to provide under C<find>
52as L<first|List::Util/first>, so that will likely be more familiar (and will
9a14bd29 53fit in better if we decide to add more List::Util functions). C<first> and
54C<last> were removed, since their functionality is easily duplicated with
55curries of C<get>.
28b96142 56
57=item Helpers that take a coderef of one argument now use C<$_>
58
59Subroutines passed as the first argument to C<first>, C<map>, and C<grep> now
60receive their argument in C<$_> rather than as a parameter to the subroutine.
61Helpers that take a coderef of two or more arguments remain using the argument
62list (there are technical limitations to using C<$a> and C<$b> like C<sort>
63does).
64
a3d98218 65=back
66
af44c00c 67See L<Moose::Meta::Attribute::Native> for the new documentation.
a3d98218 68
4ada9618 69=head1 Version 0.89
70
8a8856de 71C<< use Moose -metaclass => 'Foo' >> now does alias resolution, just like
72C<-traits> (and the C<metaclass> and C<traits> options to C<has>).
73
27f2f43f 74Added two functions C<meta_class_alias> and C<meta_attribute_alias> to
75L<Moose::Util>, to simplify aliasing metaclasses and metatraits. This is
76a wrapper around the old
77
78 package Moose::Meta::Class::Custom::Trait::FooTrait;
79 sub register_implementation { 'My::Meta::Trait' }
80
81way of doing this.
82
c8b8d92f 83The C<alias> and C<excludes> role parameters have been renamed to C<-alias>
84and C<-excludes>. The old names still work, but new code should use the new
85names, and eventually the old ones will be deprecated and removed.
86
4831e2de 87=head1 Version 0.84
88
9f52cce5 89When an attribute generates I<no> accessors, we now warn. This is to help
90users who forget the C<is> option. If you really do not want any accessors,
3de02fd8 91you can use C<< is => 'bare' >>. You can maintain back compat with older
92versions of Moose by using something like:
93
94 ($Moose::VERSION >= 0.84 ? is => 'bare' : ())
9f52cce5 95
96When an accessor overwrites an existing method, we now warn. To work around
97this warning (if you really must have this behavior), you can explicitly
98remove the method before creating it as an accessor:
99
100 sub foo {}
101
102 __PACKAGE__->meta->remove_method('foo');
103
104 has foo => (
105 is => 'ro',
106 );
107
108When an unknown option is passed to C<has>, we now warn. You can silence
109the warning by fixing your code. :)
110
4831e2de 111The C<Role> type has been deprecated. On its own, it was useless,
112since it just checked C<< $object->can('does') >>. If you were using
113it as a parent type, just call C<role_type('Role::Name')> to create an
114appropriate type instead.
115
7d6b451f 116=head1 Version 0.78
117
118C<use Moose::Exporter;> now imports C<strict> and C<warnings> into packages
119that use it.
120
c3fdacda 121=head1 Version 0.77
122
123C<DEMOLISHALL> and C<DEMOLISH> now receive an argument indicating whether or
124not we are in global destruction.
125
00c61603 126=head1 Version 0.76
127
9f0b3b64 128Type constraints no longer run coercions for a value that already matches the
129constraint. This may affect some (arguably buggy) edge case coercions that
130rely on side effects in the C<via> clause.
131
f869fc4a 132=head1 Version 0.75
133
134L<Moose::Exporter> now accepts the C<-metaclass> option for easily
135overriding the metaclass (without L<metaclass>). This works for classes
136and roles.
137
39ab7714 138=head1 Version 0.74
139
85cf0647 140Added a C<duck_type> sugar function to L<Moose::Util::TypeConstraints>
141to make integration with non-Moose classes easier. It simply checks if
142C<< $obj->can() >> a list of methods.
39ab7714 143
612fd754 144A number of methods (mostly inherited from L<Class::MOP>) have been
145renamed with a leading underscore to indicate their internal-ness. The
146old method names will still work for a while, but will warn that the
147method has been renamed. In a few cases, the method will be removed
148entirely in the future. This may affect MooseX authors who were using
149these methods.
150
600f7f85 151=head1 Version 0.73
152
0f13f53c 153Calling C<subtype> with a name as the only argument now throws an
600f7f85 154exception. If you want an anonymous subtype do:
155
156 my $subtype = subtype as 'Foo';
157
0f13f53c 158This is related to the changes in version 0.71_01.
600f7f85 159
501db4e6 160The C<is_needed> method in L<Moose::Meta::Method::Destructor> is now
161only usable as a class method. Previously, it worked as a class or
162object method, with a different internal implementation for each
163version.
164
165The internals of making a class immutable changed a lot in Class::MOP
1660.78_02, and Moose's internals have changed along with it. The
167external C<< $metaclass->make_immutable >> method still works the same
168way.
169
600f7f85 170=head1 Version 0.72
171
0f13f53c 172A mutable class accepted C<< Foo->new(undef) >> without complaint,
173while an immutable class would blow up with an unhelpful error. Now,
174in both cases we throw a helpful error instead.
600f7f85 175
0f13f53c 176This "feature" was originally added to allow for cases such as this:
600f7f85 177
178 my $args;
0f13f53c 179
180 if ( something() ) {
181 $args = {...};
600f7f85 182 }
0f13f53c 183
600f7f85 184 return My::Class->new($args);
185
0f13f53c 186But we decided this is a bad idea and a little too magical, because it
187can easily mask real errors.
600f7f85 188
189=head1 Version 0.71_01
190
0f13f53c 191Calling C<type> or C<subtype> without the sugar helpers (C<as>,
192C<where>, C<message>) is now deprecated.
193
194As a side effect, this meant we ended up using Perl prototypes on
195C<as>, and code like this will no longer work:
600f7f85 196
197 use Moose::Util::TypeConstraints;
198 use Declare::Constraints::Simple -All;
0f13f53c 199
200 subtype 'ArrayOfInts'
600f7f85 201 => as 'ArrayRef'
202 => IsArrayRef(IsInt);
203
204Instead it must be changed to this:
205
0f13f53c 206 subtype(
207 'ArrayOfInts' => {
208 as => 'ArrayRef',
209 where => IsArrayRef(IsInt)
210 }
600f7f85 211 );
212
0f13f53c 213If you want to maintain backwards compat with older versions of Moose,
214you must explicitly test Moose's C<VERSION>:
600f7f85 215
0f13f53c 216 if ( Moose->VERSION < 0.71_01 ) {
217 subtype 'ArrayOfInts'
600f7f85 218 => as 'ArrayRef'
219 => IsArrayRef(IsInt);
220 }
221 else {
0f13f53c 222 subtype(
223 'ArrayOfInts' => {
224 as => 'ArrayRef',
225 where => IsArrayRef(IsInt)
226 }
600f7f85 227 );
228 }
229
230=head1 Version 0.70
231
0f13f53c 232We no longer pass the meta-attribute object as a final argument to
233triggers. This actually changed for inlined code a while back, but the
234non-inlined version and the docs were still out of date.
235
236If by some chance you actually used this feature, the workaround is
237simple. You fetch the attribute object from out of the C<$self>
238that is passed as the first argument to trigger, like so:
239
240 has 'foo' => (
241 is => 'ro',
242 isa => 'Any',
243 trigger => sub {
244 my ( $self, $value ) = @_;
245 my $attr = $self->meta->find_attribute_by_name('foo');
246
247 # ...
248 }
249 );
600f7f85 250
251=head1 Version 0.66
252
0f13f53c 253If you created a subtype and passed a parent that Moose didn't know
254about, it simply ignored the parent. Now it automatically creates the
255parent as a class type. This may not be what you want, but is less
256broken than before.
600f7f85 257
0f13f53c 258You could declare a name with subtype such as "Foo!Bar". Moose would
259accept this allowed, but if you used it in a parameterized type such
260as "ArrayRef[Foo!Bar]" it wouldn't work. We now do some vetting on
261names created via the sugar functions, so that they can only contain
262alphanumerics, ":", and ".".
600f7f85 263
264=head1 Version 0.65
265
266Methods created via an attribute can now fulfill a C<requires>
0f13f53c 267declaration for a role. Honestly we don't know why Stevan didn't make
268this work originally, he was just insane or something.
600f7f85 269
0f13f53c 270Stack traces from inlined code will now report the line and file as
271being in your class, as opposed to in Moose guts.
600f7f85 272
273=head1 Version 0.62_02
274
0f13f53c 275When a class does not provide all of a role's required methods, the
276error thrown now mentions all of the missing methods, as opposed to
277just the first missing method.
600f7f85 278
0f13f53c 279Moose will no longer inline a constructor for your class unless it
5e26e3f2 280inherits its constructor from Moose::Object, and will warn when it
281doesn't inline. If you want to force inlining anyway, pass
b84f64da 282C<< replace_constructor => 1 >> to C<make_immutable>.
0f13f53c 283
284If you want to get rid of the warning, pass C<< inline_constructor =>
fbf7ba85 2850 >>.
600f7f85 286
287=head1 Version 0.62
288
0f13f53c 289Removed the (deprecated) C<make_immutable> keyword.
600f7f85 290
291Removing an attribute from a class now also removes delegation
0f13f53c 292(C<handles>) methods installed for that attribute. This is correct
600f7f85 293behavior, but if you were wrongly relying on it you might get bit.
294
295=head1 Version 0.58
296
0f13f53c 297Roles now add methods by calling C<add_method>, not
298C<alias_method>. They make sure to always provide a method object,
299which will be cloned internally. This means that it is now possible to
300track the source of a method provided by a role, and even follow its
301history through intermediate roles. This means that methods added by
302a role now show up when looking at a class's method list/map.
303
304Parameter and Union args are now sorted, this makes Int|Str the same
305constraint as Str|Int. Also, incoming type constraint strings are
306normalized to remove all whitespace differences. This is mostly for
307internals and should not affect outside code.
308
309L<Moose::Exporter> will no longer remove a subroutine that the
310exporting package re-exports. Moose re-exports the Carp::confess
311function, among others. The reasoning is that we cannot know whether
312you have also explicitly imported those functions for your own use, so
313we err on the safe side and always keep them.
600f7f85 314
315=head1 Version 0.56
316
0f13f53c 317C<Moose::init_meta> should now be called as a method.
600f7f85 318
0f13f53c 319New modules for extension writers, L<Moose::Exporter> and
320L<Moose::Util::MetaRole>.
600f7f85 321
322=head1 Version 0.55_01
323
324Implemented metaclass traits (and wrote a recipe for it):
325
326 use Moose -traits => 'Foo'
327
328This should make writing small Moose extensions a little
329easier.
330
331=head1 Version 0.55
332
333Fixed C<coerce> to accept anon types just like C<subtype> can.
334So that you can do:
335
336 coerce $some_anon_type => from 'Str' => via { ... };
337
338=head1 Version 0.51
339
52da380a 340Added C<BUILDARGS>, a new step in C<< Moose::Object->new() >>.
600f7f85 341
342=head1 Version 0.49
343
0f13f53c 344Fixed how the C<< is => (ro|rw) >> works with custom defined
345C<reader>, C<writer> and C<accessor> options. See the below table for
600f7f85 346details:
347
348 is => ro, writer => _foo # turns into (reader => foo, writer => _foo)
349 is => rw, writer => _foo # turns into (reader => foo, writer => _foo)
350 is => rw, accessor => _foo # turns into (accessor => _foo)
351 is => ro, accessor => _foo # error, accesor is rw
352
353=head1 Version 0.45
354
0f13f53c 355The C<before/around/after> method modifiers now support regexp
356matching of method names. NOTE: this only works for classes, it is
357currently not supported in roles, but, ... patches welcome.
600f7f85 358
0f13f53c 359The C<has> keyword for roles now accepts the same array ref form that
360L<Moose>.pm does for classes.
600f7f85 361
0f13f53c 362A trigger on a read-only attribute is no longer an error, as it's
363useful to trigger off of the constructor.
600f7f85 364
0f13f53c 365Subtypes of parameterizable types now are parameterizable types
366themselves.
600f7f85 367
368=head1 Version 0.44
369
0f13f53c 370Fixed issue where C<DEMOLISHALL> was eating the value in C<$@>, and so
371not working correctly. It still kind of eats them, but so does vanilla
372perl.
600f7f85 373
374=head1 Version 0.41
375
0f13f53c 376Inherited attributes may now be extended without restriction on the
600f7f85 377type ('isa', 'does').
378
0f13f53c 379The entire set of Moose::Meta::TypeConstraint::* classes were
380refactored in this release. If you were relying on their internals you
381should test your code carefully.
600f7f85 382
383=head1 Version 0.40
384
0f13f53c 385Documenting the use of '+name' with attributes that come from recently
386composed roles. It makes sense, people are using it, and so why not
387just officially support it.
600f7f85 388
0f13f53c 389The C<< Moose::Meta::Class->create >> method now supports roles.
600f7f85 390
86b96832 391It is now possible to make anonymous enum types by passing C<enum> an
392array reference instead of the C<< enum $name => @values >>.
600f7f85 393
394=head1 Version 0.37
395
0f13f53c 396Added the C<make_immutable> keyword as a shortcut to calling
397C<make_immutable> on the meta object. This eventually got removed!
600f7f85 398
0f13f53c 399Made C<< init_arg => undef >> work in Moose. This means "do not accept
600f7f85 400a constructor parameter for this attribute".
401
0f13f53c 402Type errors now use the provided message. Prior to this release they
403didn't.
600f7f85 404
405=head1 Version 0.34
406
407Moose is now a postmodern object system :)
408
0f13f53c 409The Role system was completely refactored. It is 100% backwards
410compat, but the internals were totally changed. If you relied on the
411internals then you are advised to test carefully.
600f7f85 412
413Added method exclusion and aliasing for Roles in this release.
414
0f13f53c 415Added the L<Moose::Util::TypeConstraints::OptimizedConstraints>
416module.
600f7f85 417
0f13f53c 418Passing a list of values to an accessor (which is only expecting one
419value) used to be silently ignored, now it throws an error.
600f7f85 420
421=head1 Version 0.26
422
0f13f53c 423Added parameterized types and did a pretty heavy refactoring of the
424type constraint system.
600f7f85 425
0f13f53c 426Better framework extendability and better support for "making your own
427Moose".
600f7f85 428
429=head1 Version 0.25 or before
430
0f13f53c 431Honestly, you shouldn't be using versions of Moose that are this old,
432so many bug fixes and speed improvements have been made you would be
433crazy to not upgrade.
600f7f85 434
0f13f53c 435Also, I am tired of going through the Changelog so I am stopping here,
436if anyone would like to continue this please feel free.
600f7f85 437
438=head1 AUTHOR
439
440Stevan Little E<lt>stevan@iinteractive.comE<gt>
441
442=head1 COPYRIGHT AND LICENSE
443
444Copyright 2009 by Infinity Interactive, Inc.
445
446L<http://www.iinteractive.com>
447
448This library is free software; you can redistribute it and/or modify
449it under the same terms as Perl itself.
450
0f13f53c 451=cut