Class::Accessor::Inherited::XS - fast XS inherited accessors
#install accessors at compile time use Class::Accessor::Inherited::XS inherited => [qw/foo bar/], # here key names are equal to accessor names ; use Class::Accessor::Inherited::XS { inherited => { bar => 'bar_key', foo => 'foo_key', }, }; #or in a Class::Accessor::Grouped-like fashion use parent 'Class::Accessor::Inherited::XS'; __PACKAGE__->mk_inherited_accessors('foo', ['bar', 'bar_key']);
This module provides very fast implementation for 'inherited' accessors, that were introduced in Class::Accessor::Grouped. They give you capability to override values set in a parent class with values set in childs or object instances. Generated accessors are compatible with Class::Accessor::Grouped generated ones.
Since this module focuses primary on speed, it provides no capability to have your own per-class getters/setters logic (like overriding get_inherited/set_inherited in Class::Accessor::Grouped).
Starting with perl 5.16.0, this module provides full support for UTF-8 method names and hash keys. Before that, you can't distinguish UTF-8 strings from bytes string in method names, only in hash keys. You have been warned.
Though highly discouraged, perl threads are supported by Class::Accessor::Inherited::XS. You may have accessors with the same names pointing to differents keys in different threads, etc. There are no known conceptual leaks.
Class::Accessor::Inherited::XS is 5-12x times faster than Class::Accessor::Grouped, depending on your usage pattern. Accessing data from a parent in large inheritance chain is still the worst case, but even there Class::Accessor::Inherited::XS beats Class::Accessor::Grouped best-case.
Here are results from the benchmark run on perl 5.20.1 (see bench folder):
Rate pkg_gparent_cag pkg_cag obj_cag pkg_set_cag pkg_gparent_caixs pkg_caix pkg_set_caix obj_caix obj_cxa obj_direct pkg_gparent_cag 238597/s -- -76% -80% -82% -91% -97% -97% -98% -99% -99% pkg_cag 998731/s 319% -- -18% -25% -64% -86% -86% -92% -94% -95% obj_cag 1223277/s 413% 22% -- -8% -56% -83% -83% -91% -93% -94% pkg_set_cag 1323322/s 455% 33% 8% -- -52% -82% -82% -90% -92% -93% pkg_gparent_caixs 2752510/s 1054% 176% 125% 108% -- -62% -63% -79% -84% -86% pkg_caix 7281773/s 2952% 629% 495% 450% 165% -- -1% -44% -56% -64% pkg_set_caix 7349827/s 2980% 636% 501% 455% 167% 1% -- -44% -56% -64% obj_caix 13008746/s 5352% 1203% 963% 883% 373% 79% 77% -- -22% -36% obj_cxa 16733631/s 6913% 1575% 1268% 1165% 508% 130% 128% 29% -- -17% obj_direct 20201922/s 8367% 1923% 1551% 1427% 634% 177% 175% 55% 21% --
Class::Accessor::Grouped
Class::XSAccessor
Copyright (C) 2009 by Vladimir Timofeev
Copyright (C) 2014 by Sergey Aleynikov
This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself, either Perl version 5.10.1 or, at your option, any later version of Perl 5 you may have available.
To install Class::Accessor::Inherited::XS, copy and paste the appropriate command in to your terminal.
cpanm
cpanm Class::Accessor::Inherited::XS
CPAN shell
perl -MCPAN -e shell install Class::Accessor::Inherited::XS
For more information on module installation, please visit the detailed CPAN module installation guide.