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