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