Dean Arnold wrote: > Jerry D. Hedden wrote: >> Dean Arnold wrote: >>> I've been pouring over the p5p archives trying to find >>> what the subject p5p summary item is about, but wo/ any luck. >>> Can someone point out the relevent thread title, or maybe >>> summarize what "threads::shared could share aggregates >>> properly with only Perl level changes to shared.pm" >>> means ? >> >> It means that something like this would DWIM: >> >> my $x : shared; >> $x = [ { 'complex' => 'aggregate' }, [ qw/ currently not sharable >> / ] ]; >> > > <snip/> > >> >> Thread::Queue has the Perl code needed for making 'complete' >> shared clones of data structures (i.e., all parts whether >> shared or not are cloned). Tweaking it to not clone already >> shared portions is trivial. >> > > I see someone's been busy ;^) > > Alas, there's one catch that the current T::Q implementation > doesn't cover: recursive structures: > (Using AS Perl 5.8.8, WinXP, T::Q 2.06) > <snip/> > OTOH, if a bitflag could be grabbed > somewhere to do a mark/sweep, this might be solvable > Or maybe using a fieldhash to key the original ref thats > being cloned, do a quick lookup, and if it exists, then skip it <snip/> Momentary insanity: Why not reuse the existing perl_clone code ? Assuming an appropriate entry point could be found *and* perl_clone can be fooled into using the shared global interpretter instead of creating a new interpretter, it should be possible to do a complete clone wo/ circular issues. And it would presumably support creation of shared filehandles. OTOH, the last time I tried to decipher perl_clone(), I ended up w/ a 3 day headache, so it may be intractable. - DeanThread Previous | Thread Next