Being able to use all this power from within perl is just amazing!
The author is also very responsive and helpful.
The POD doc is quite sparse but this is really not a problem since this module almost strictly follow the C API, which is heavily documented on the sleepycat website (maybe a link in the POD would be helpful).
Examples from the C reference manual can be adapted to perl in a minute (except with far less lines of code!)
Methods calls seem to be twice as fast as normal methods. And this will increase if you use a lot of attributes in your methods (as it is always the case in real world situations).
But it takes a lot of memory: classes shown in benchmark.pl take 10.7KB per object with this module, compared to only 0.16KB per object for a traditional hash-based class and 0.12Kb for an array-base class.
Inheritance is very slow (4 to 5 times slower), as well as constructors (100 times slower!).
The problem is that memory consumption and constructors' slowness will increase with the number and complexity of your methods...
For me, the main drawback stays the slowness of inherited methods.
Could this be optimized?
This makes OO programming in Perl faster, cleaner, stricter!
I find this module better than base/fields in every aspect:
- no deprecated pseudo-hash
- no need to call fields::new() in constructors
- no need to always give the type of your variable to get the speed up, so you can write things like $_->[FOO] if you so wish.
Now I cannot imagine writing OO code in perl without it!
I give it a 5 for the documentation because of the PDF tutorial (CPAN doesn't show it, but it is included in the distribution.
It seems very stable and efficient, and even has its own top utility with NetServer::Portal !
I hope support for epoll and kqueue will be added in the future (I saw that epoll was added to the todo list in this version!).
I give it a 4 for the interface and the ease of use because I don't really like having to do $_->w->data all the time if I don't want to use closures to get my data (wouldn't it be possible to provide it as the second argument for Perl callbacks? this would not break backward compatibility).