Am Mittwoch, 18. Oktober 2006 01:35 schrieb Karl Forner:
> Hi,
>
> Is there a way to specify a minimum allocation size for PMCs like strings
> or arrays ?
> Something like in perl : %h = 1000 ?
>
> It could boost execution times when you have a good idea of the space you
> need.
> For example, I'd like to do:
>
> #ensure that the array has enough allocated storage for 1000000 elements
> without need for allocationg memory
> new P0, .Array, 1000000
>
> and then push 1,000,000 elements.
>
> N.B: it is not the same as
>
> new P0, .Array
> P0 = 1000000

This isssue was already discussed a few times. Last time was likely, when I 
introduced the elements opcode, which helps at least to fix the 'get' side of 
the problem.

It originated in a perl5-ism in the first array implementations, following the 
perl-way:

  $elems = scalar @array;

which was directly translated to:

  set I0, P0

This works at least for "small" arrays.

The problem is now of course, that we are forcing perl syntax elements on all 
HLLs having arrays. Now we have additionally:

  elements I0, P0

with it's own vtable. The problem is of course that the former construct is 
used heavily.

There's no such thing for setting the size or/and the allocation. And worse, 
arrays are implementing:

  set P0, I0   # pre-size or allocate and fill and set element count?

... in an inconsistent way.

IMHO the only way to get rid of this historical confusion is:

- disable the set opcode for arrays by throwing an exception in the vtable
- use elements for getting .elems only
- implement 2 new opcodes
  elements P0, I0    # fill with default value, set element count to I0
  presize  P0, I0    # allocate storage, elem count is unchanged
- implement an introspection method to get various info like allocated size or 
storage needed

> Thx
> Karl

leo

Reply via email to