On Wed, 27 Aug 2003, Matt Fowles wrote:

> Dan~
> 
> I still don't see why this necessitates keyed variants of all the ops. 
> Couldn't we have a "prepkeyed" op which would return a specialized pmc 
> to use in the next op?  

We could--perl 5 uses a variant of this where active aggregates return a 
placeholder variable with magic on it that then does the appropriate thing 
when operated on. I can, though, learn from other people's mistakes if 
they hurt enough. :)

Besides requiring active aggregates to create magic PMCs, it makes
accessing compact aggregates very inefficient. Consider the case where we 
have an integer array we're working with--it means code like:

  foreach loopvar (1..10000) {
    total[loopvar] = somedata[loopvar] + otherdata[loopvar];
  }

(That addition, BTW, could be a single op with keyed addition in the
vtables, though I wouldn't expect the majority of the usage to be that 
simple)

If either (or both) of somedata or otherdata isn't an array of PMCs, 
there's going to be an awful lot of temporary PMC creation, which is a 
waste. We're trying to encourage the use of more compact aggregate 
representations with Parrot, as currently Perl/Python/Ruby all have really 
portly aggregates and part of the design goals is to allow for compact 
versions in places we can be compact.

                                        Dan

Reply via email to