← Back to context

Comment by fancyfredbot

15 hours ago

Thanks!

I'm a bit confused about how you could decide the number of stacks at compile time. I can see you could see how many arrays are lexically in scope. However if the code puts one dynamic array inside another dynamic array I can get to an unbounded number of total stacks without ever needing more than two in lexical scope at once. Do you also add stacks at runtime? Like a stack of stacks?

The top level arrays all are owned by a local variable. An array of arrays is just allocated to a single stack.

  • I'm sorry if I'm being dense here but I can't see how that would work?

    The spec on your GitHub says: "Two simultaneously-live resizable values never share a stack."

    So I surely can't have a dynamic array of dynamic arrays share a single stack? That's an unbounded number of resizeable values sharing a stack?

    You could make it work on a single stack but that would involve having non-contiguous memory for each inner array since you can add to any array in any order.

    The spec implies that we need one stack per element of the outer dynamic array which would let you have contiguous memory for each inner array, but you wouldn't know how many stacks you needed at compile time.

    • The language has different levels of solutions for the inner arrays being dynamic, for example a) only dynamic upon construction, b) fixed size, c) fixed size with cap, or d) allocated in a pool in a different array.

      Depending on your needs you use one of these solutions.