Dan Sugalski <[EMAIL PROTECTED]> wrote:
> Okay, at this point we've a pile of different array classes
> Before we go any further we need to figure out what we want.
1) Unify setting/getting element count
- the elements() vtable is unused (not accessible by opcode)
- we use get_integer()
- push for Array is unusabale currently
- reserve array store size before filling can have performance
benefits by avoiding reallocation
So e.g.
elements I0, P0 # @a.elements # scalar @a
elements P0, I0 # @a.elements = I0 # $#a = I0-1
set I0, P0 # @a.internal_capacity
set P0, I0 # @a.internal_capacity = I0
2) Array vs PerlArray
- PerlArray does autoexpand and is derived from Array.
- Array throws exceptions if you access elements beyond capacity
- the underlying List does not do bounds checking
So the class inheritance is wrong.
3) SArray
- Should have been a simple typed array (At these times PerlHash
store was typed too). Its obsolete now.
4) list.c
- is too complicated for the current usage patterns
A currently better implementation could be e.g.
- one buffer array
- a start index to accomodate shift/unshift
- resize by 2 << n until a certain limit, then by that limit
- after pop/shift shrink buffer by limit if limit+threshold is free
leo