http://www.perlmonks.org?node_id=515432


in reply to Seeking inside-out object implementations

We are finishing up a re-architecture of one of our internal applications. Most of the design inherits from an Inside-out object that we developed (Common::Thing). It uses blessed scalar refs as the object. Every class that inherits from this class also inherits new(), copy(), seed(), dump(), as_hash(), and DESTROY() object methods and a make_attributes() class method. Common::Thing does some stash manipulations to make a getter/setter method for each attribute in the derived class's name space. A derived class would look something like:

package My::Thing; use base qw(Common::Thing); __PACKAGE__->make_attributes( qw/ head should knees toes / ); # methods to do work go in here 1;

It has worked well for our purposes, but certainly fails thread safety. We did quite a bit of work to stabalize our application around threads, but finally gave up when the fact that Perl is not thread-safe became overpoweringly obvious.

Ivan Heffner
Sr. Software Engineer, DAS Lead
WhitePages.com, Inc.

Replies are listed 'Best First'.
Re^2: Seeking inside-out object implementations
by jdhedden (Deacon) on Dec 09, 2005 at 19:17 UTC
    Making inside-out objects thread-safe is not a trivial process, but it can be done. Object::InsideOut is thread-safe, and even goes further by providing support for threads::shared.

    You might consider converting your Common::Thing module into a wrapper around Object::InsideOut to give you the functionality you need.


    Remember: There's always one more bug.