У тебя вектор (а не массив кстати) освобождается после завершения функции. То есть ты создаёшь клон вектора, а потом оригинальный вектор дропаешь и возвращаешь клон. Двойная работа.
Если common - вектор уничтожается при завершении работы функции, то как возвращаемый объект этого верктора не потеряет значения в куче?
если ты его вернёшь, именно его, а не его клон, то он не уничтожится
.clone() у вектора выделяет новый буфер в куче и по очереди клонирует туда каждый элемент исходного вектора
хм, занятное поведение.
если ты создашь клон, то будет тоже самое поведение без дропа, но уже для клона, а оригинал дропнется
Обычная семантика перемещения, в расте она по умолчанию
Подожди, в любом случае по очереди? Даже если элемент имплементирует Copy?
Не потеряет, move semantics же
Пойду чекну, нет ли там специализации
Воодушевляет // N.B., see the `hack` module in this file for more details.
Там такого много. Я очень радовался когда читал
Ну короче специализации не вижу. Но наверное для LLVM там все очень просто.
Кажется, это идёт через SpecExtend и падает вот сюда https://github.com/rust-lang/rust/blob/master/library/alloc/src/vec.rs#L1268
Обсуждают сегодня