Пара причин.
Имея однородный векторный тип в языке, компилятор может сделать некоторые твердые предположения о производительности. В идеале, в некоторых сильно оптимизированных сценариях ссылка на вектор может быть немного больше, чем точка на блок памяти. Я не говорю, что реализации Scheme действительно делают это, но они могут это делать.
Учитывая, что почти каждый раз при изменении размера вектора это больше похоже на копирование в новую область памяти, которая может содержать новый вектор. Просто грубая истина в том, как устроена память.
Итак, учитывая это, вы можете видеть, что если все, что у меня есть, это указатель на память, если этот буфер изменен и перемещен, то мой указатель больше не действителен. Это указывает на старую память.
Но если я могу предположить, что размер моей памяти никогда не изменится, то вполне вероятно, что в качестве оптимизации компилятором память никогда не изменится, и что я могу представить и ссылаться на этот вектор как просто указатель на память.
И это основная цель однородных векторов - обеспечить потенциально более быстрый доступ к специализированным блокам памяти.
Поскольку изменение размера вектора почти неизбежно связано с копией, вы также можете сделать эту копию явной, предоставив компилятору полную видимость изменений в ссылке на вектор.