Scala’s default IndexedSeq implementation, Vector, works pretty much like that, using a some sort of wide tree of array chunks. Performance is pretty good. Python’s deque I think uses chunks. Java’s ArrayDeque uses a single array, it’s just smart enough to adjust the starting index when deleting from the front instead of shifting everything over.