Buddha Buck wrote:
> At 01:45 PM 02-12-2001 -0300, Branden wrote:
> >Am I too wrong here?
>
> It's... complicated...
>
Agreed.
> Here's an example of where things could go wrong:
>
> sub foo {
> my $destroyme1 = new SomeClass;
> my $destroyme2 = new SomeClass;
> my @processme1;
> my @processme2;
> ...
> push @processme1, $destroyme1;
> push @processme2; $destroyme2;
> ...
> return \@processme2;
> }
>
> If $destroyme1 and $destroyme2 are ref-counted, but @processme1 and
> @processme2 are not, ...
>
Hey, there's no way for this to work! Anything that can be stored in $ can
also be stored in @ or %, so having them with different GC's wouldn't
probably work.
Actually I was thinking something like PMCs ($@%) being copy-GCed and
referred objects (new SomeClass) being refcounted. In this case above, every
operation would use refcount's, since they're storing objects in PMCs. What
wouldn't use refcount is
foreach $i (@a) {
$i++;
}
Normally $i would be an alias to an element of @a, that means it would
reference the same PMC that one element of @a is referring to. If in this
case copy-GC is used, probably the GC wouldn't even be called inside of the
loop, and the whole operation would be done without overhead, even of
refcounting, even of copy-GC.
I really don't know if this would be a win over full refcounting, since the
most things (objects) would continue to use refcounting, and less used
things (aliases) would not. I think we can only see if it works with some
tests & benchmarks.
- Branden