When I was reading Steele's history of common lisp, published in the
90s one thing that struck me as maaaaybe obviously true but that I
still need to understand is that a central regret of common lisp was
that the standard included the inefficient data structures vectors and
arrays. Arrays in common lisp are like this:
One criticism was that it was too hard to write a Sufficiently Smart
Compiler to make array displacement like that efficient and the
overhead of nested array displacements was too high.
Whereas an array with a fill pointer whether or not adjustable sits
with unused array addresses just taking up space, lisp compilers
generally implement weak datastructures as an extension:
which is a ubiquitous extension in the usual common lisp compilers
(and schemes and gnu / lucient elisps, smalltalk and others evidently
by 2005)
with the cost that weak datastructures are also less efficient because
they need additional information to know when weak references can be
garbage collected.