now support dynamic arrays that automatically allocate themselves when necessary