Size: a a a

Rust — русскоговорящее сообществo

2020 November 03

А

Алексей in Rust — русскоговорящее сообществo
Dmitry Klimov
То есть clone в данном случае делает лишнюю работу?
У тебя вектор (а не массив кстати) освобождается после завершения функции. То есть ты создаёшь клон вектора, а потом оригинальный вектор дропаешь и возвращаешь клон. Двойная работа.
источник

DK

Dmitry Klimov in Rust — русскоговорящее сообществo
Я для себя проект делаю, без коммерции.
источник

А

Алексей in Rust — русскоговорящее сообществo
Dmitry Klimov
В rust есть куча? я думал все в стеке хранится 🙁
вектор данные в куче держит как раз
источник

MB

Mikail Bagishov in Rust — русскоговорящее сообществo
Dmitry Klimov
В rust есть куча? я думал все в стеке хранится 🙁
Точно такая же куча, как в C или C++
источник

DK

Dmitry Klimov in Rust — русскоговорящее сообществo
Алексей
У тебя вектор (а не массив кстати) освобождается после завершения функции. То есть ты создаёшь клон вектора, а потом оригинальный вектор дропаешь и возвращаешь клон. Двойная работа.
Если common - вектор уничтожается при завершении работы функции, то как возвращаемый объект этого верктора не потеряет значения в куче?
источник

А

Алексей in Rust — русскоговорящее сообществo
Dmitry Klimov
Если common - вектор уничтожается при завершении работы функции, то как возвращаемый объект этого верктора не потеряет значения в куче?
если ты его вернёшь, именно его, а не его клон, то он не уничтожится
источник

А

Алексей in Rust — русскоговорящее сообществo
потому что он при возврате замувается
источник

MB

Mikail Bagishov in Rust — русскоговорящее сообществo
Dmitry Klimov
Если common - вектор уничтожается при завершении работы функции, то как возвращаемый объект этого верктора не потеряет значения в куче?
.clone() у вектора выделяет новый буфер в куче и по очереди клонирует туда каждый элемент исходного вектора
источник

DK

Dmitry Klimov in Rust — русскоговорящее сообществo
Алексей
если ты его вернёшь, именно его, а не его клон, то он не уничтожится
хм, занятное поведение.
источник

А

Алексей in Rust — русскоговорящее сообществo
Dmitry Klimov
хм, занятное поведение.
если ты создашь клон, то будет тоже самое поведение без дропа, но уже для клона, а оригинал дропнется
источник

MB

Mikail Bagishov in Rust — русскоговорящее сообществo
Dmitry Klimov
хм, занятное поведение.
Обычная семантика перемещения, в расте она по умолчанию
источник

EG

Emmanuel Goldstein in Rust — русскоговорящее сообществo
Mikail Bagishov
.clone() у вектора выделяет новый буфер в куче и по очереди клонирует туда каждый элемент исходного вектора
Подожди, в любом случае по очереди? Даже если элемент имплементирует Copy?
источник

MP

Mag Pie in Rust — русскоговорящее сообществo
Dmitry Klimov
Если common - вектор уничтожается при завершении работы функции, то как возвращаемый объект этого верктора не потеряет значения в куче?
Не потеряет, move semantics же
источник

DK

Dmitry Klimov in Rust — русскоговорящее сообществo
Хорошо, теперь будет для меня правило возвращать объект-вектора из функции, а не клон этого вектора.
источник

MB

Mikail Bagishov in Rust — русскоговорящее сообществo
Emmanuel Goldstein
Подожди, в любом случае по очереди? Даже если элемент имплементирует Copy?
Пойду чекну, нет ли там специализации
источник

DK

Dmitry Klimov in Rust — русскоговорящее сообществo
Спасибо всем за ответы!
источник

MB

Mikail Bagishov in Rust — русскоговорящее сообществo
Dmitry Klimov
Хорошо, теперь будет для меня правило возвращать объект-вектора из функции, а не клон этого вектора.
Смотри, есть правило попроще: не используй clone(), если и без него компилируется
источник

А

Алексей in Rust — русскоговорящее сообществo
Dmitry Klimov
Хорошо, теперь будет для меня правило возвращать объект-вектора из функции, а не клон этого вектора.
Это для всего справедливо, а не только для векторов. Вообще лучше всё таки почитать про мув семантику и попытаться понять.
источник

EG

Emmanuel Goldstein in Rust — русскоговорящее сообществo
Mikail Bagishov
Пойду чекну, нет ли там специализации
Воодушевляет
// N.B., see the `hack` module in this file for more details.
источник

MP

Mag Pie in Rust — русскоговорящее сообществo
Emmanuel Goldstein
Воодушевляет
// N.B., see the `hack` module in this file for more details.
Там такого много. Я очень радовался когда читал
источник