Как стать автором
Обновить

Комментарии 10

Спасибо, забавно. Только в 4 примере не «держит ссылку даже после окончания “срока службы” исходного массива», а ссылается на другой array в стеке, т.к. это value type.
Спасибо. Несмотря на то что внешне Array и ArraySlice являются структурами и соблюдают семантику value types, их внутреннее устройство совсем не простое.
В частности, если упростить, Array хранит внутри ссылку на класс, который реализует его буфер данных. При создании ArraySlice тот тоже ссылается на этот буфер. Т.о. уничтожение массива не приводит к уничтожению данных. И копирования содержимого буфера тут тоже нет
Вы говорите про copy on write, array и slice ссылаются на одну и туже область памяти с данными, для оптимизации их хранения и доступа.
Тут скорее неверно употреблено слово ссылка. У всех сразу появляются ассоциации про ссылочный тип. А структура им не является. У меня возник тот же вопрос при первом прочтении.
В 7 примере ничего странного, как и в большинстве строго-типизированных языков дженерики инвариантны, только коллекции из Swift поддерживают ковариантность, не знаю почему, возможно из-за совместимости с ObjC где можно пометить тип коллекции как __covariant/__contravariant.
Да, вы правы. В целом все действительно так. А вот для стандартных коллекций разработчики Swift реализовали ковариантность, поскольку это сильно влияло на удобство их применения.
Отлично, больше бы тестов на swift
Спасибо)
Да, было интересно.
Спасибо)
Зарегистрируйтесь на Хабре, чтобы оставить комментарий