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