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