Version 3 (modified by kurahaupo, 12 years ago)

Make multiple variants for different purposes?


Resizable Arrays

  • Do any HLL's use Resizable Arrays without extending them to include initialization of unset elements?

They were originally included as counterparts to the Fixed Arrays, but extended to support pop, push, shift, unshift and set-integer. However it seems that the lack of initialization is a misplaced optimization that is probably of no use to any HLL, forcing every HLL to override this behaviour.

  • Is there room to make new types of Resizable Arrays that target their use as a queue (optimized for push, pop, shift & unshift) rather than for indexability?

The current versions implement shift and unshift by doing bulk memmove, which is quite expensive. A ring-buffer approach that uses head and tail indexes would be far more efficient, if that's what we're really targetting by having the content uninitialized.

  • Is there room to make new types of Resizable Arrays that target raw buffer use and don't allow push, pop, shift and unshift?


Resizable Arrays

  • Update all ResizableArrays to perform initialization of unset elements, in particular those that re-appear when an array is shrunk and then re-extended. Assuming of course no HLL's would suffer significantly from this "pessimization".
  • Array types should grow by powers of two (or multiples of system page size for large arrays) for improved allocation performance
  • Deprecate and remove Array PMC type.