X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2FCatalyst%2FUpgrading.pod;h=69141d7c26b08d3fa32b6fb602c3eae068d173eb;hb=9992a5990019714a7272a6b656acae25d95e46c3;hp=ae5a6ffa37240d12003e88fc57a247afa01625f7;hpb=4e68badce837f4ebc4567faeaa707bbae88c5ffd;p=catagits%2FCatalyst-Runtime.git diff --git a/lib/Catalyst/Upgrading.pod b/lib/Catalyst/Upgrading.pod index ae5a6ff..69141d7 100644 --- a/lib/Catalyst/Upgrading.pod +++ b/lib/Catalyst/Upgrading.pod @@ -16,6 +16,36 @@ this document, then please email the Catalyst list to discuss the problem. =head1 Known backwards compatibility breakages. +=head2 Issues with Class::C3 + +Catalyst 5.80 uses L method dispatch order. This is built into +perl 5.10, and comes via L for perl 5.8. This replaces L +with L, forcing all components to resolve methods using +C3, rather than the unpredictable dispatch order of L. + +To be able to do this, however, entails that the graph of superclasses for each +class must be linearizable using the C3 algorithm. Unfortunately, when +superclasses are being used as mixins, it is easy to get this wrong. + +Most common is the case of: + + package Component1; # Note, this is the common case + use base qw/Class::Accessor::Fast Class::Data::Inheritable/; + + package Component2; # Accidentally saying it this way round causes fail. + use base qw/Class::Data::Inheritable Class::Accessor::Fast/; + + package GoesBang; + use base qw/Component1 Component2/; + +And the Catalyst plugin most often causing this, is +L - if you are using this plugin +and see issues, then please upgrade! + +This can, however, be found in your own application - the only solution is to +go through each base class of the class the error was reported against, until +you identify the ones in conflict, and resolve them. + =head2 Components which inherit from Moose::Object before Catalyst::Component Moose components which say: