В голанге можно использовать срезы (slices). Они представляют собой виртуальный массив, построенный на базе "настоящего" массива и содержат три величины: ссылку на оригинальный массив, индекс начального элемента и индекс конечного элемента. С точки зрения использования срез - это просто массив. Срезы - единственный способ иметь в голанге массив переменного размера. Настоящий массив всегда имеет фиксированный размер.

В Си этот функционал можно реализовать через арифметику указателей, в лиспе есть displaced arrays и fill pointer. Вероятно, уши растут из Фортрана... В отличие от Си, в голанге невозможно попасть за границы массива с помощью среза - имеет место динамический контроль.

По впечатлениям, что-то подобное нужно. Мне нравится, что это решение простое. В лиспе наворочено гораздо больше, а содержания не больше. Т.е. в плане наличия минимального набора примитивов решение в голанге выглядит интересным.

Но срезы содержат ловушки. Например, операция добавления элемента в срез может копировать базовый массив, а может создавать разделяемую копию, и расширять срез за счёт охвата ранее не охваченных частей базового массива, если в нём ещё есть место. Так легко возникает непостижимый граф связей между массивами и срезами, и неявное разделение данных между разными срезами, тоже непостижимое. Вместе с отсутствием иммутабельности это выглядит опасным. Но важно, что при этом сохраняется шанс на эффективность.

Есть ли что-то подобное в A2?