- PVSM.RU - https://www.pvsm.ru -
Ниже представлено графическое описание перемещения, копирования и заимствования в языке программирования Rust [1]. В основном, эти понятия специфичны только для Rust, являясь общим камнем преткновения для многих новичков.
Чтобы избежать путаницы, я попытался свести текст к минимуму. Данная заметка не является заменой различных учебных руководств, и лишь сделана для тех,
кто считает, что визуально информация воспринимается легче. Если вы только начали изучать Rust и считаете данные графики полезными, то я бы порекомендовал вам отмечать свой код похожими схемами для лучшего закрепления понятий.
Картинка кликабельна, вы можете её увеличить. Также вы можете получить схемы без перевода в виде PNG [3], SVG [4] или PDF [5].
Верхние две схемы изображают два основных вида семантики данных [6], которые нам доступны: либо перемещение, либо копирование.
Copy
, имеет семантику перемещения, поведение которой показано на рисунке.Copy
. В этом случае каждое использование объекта будет приводить к копированию, как показано на схеме — раздвоением.Две центральные схемы описывают два метода заимствования [7] объекта, которым вы владеете, и то, что каждый из этих методов предлагает.
В обеих схемах 'ρ
это имя, которое я выбрал для обозначения времени жизни [8] ссылок. Я специально использовал греческую букву, так как, на текущий момент, нет никакого синтаксиса для описания конкретных времен жизни в Rust.
Последние две схемы подводят итог, показывая основные отличия и общие черты между двумя видами ссылок, как в виде изображения, так и в виде текста. Спецификатор "внешне" [9] важен, так как у вас может быть внутренняя изменяемость через вещи похожие на Cell
[10].
Хотелось бы выразить отдельную благодарность Андрею Лесникову (@ozkiff [11]), Serhii Plyhun (@snuk182 [12]) и Сергею Веселкову (@vessd [13]) за помощь в переводе и последующее ревью.
Автор: lukretsiy
Источник [14]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/programmirovanie/244761
Ссылки в тексте:
[1] языке программирования Rust: https://www.rust-lang.org/
[2] Image: https://habrastorage.org/files/794/b0a/8af/794b0a8af6564418b897e0b2e5a6afa6.png
[3] PNG: https://rufflewind.com/img/rust-move-copy-borrow.png
[4] SVG: https://rufflewind.com/img/rust-move-copy-borrow.svg
[5] PDF: https://rufflewind.com/img/rust-move-copy-borrow.pdf
[6] семантики данных: http://rurust.github.io/rust_book_ru/src/ownership.html
[7] заимствования: http://rurust.github.io/rust_book_ru/src/references-and-borrowing.html
[8] времени жизни: http://rurust.github.io/rust_book_ru/src/lifetimes.html
[9] "внешне": http://rurust.github.io/rust_book_ru/src/mutability.html#Внутренняя-interior-и-внешняя-exterior-изменяемость
[10] Cell
: https://doc.rust-lang.org/std/cell/
[11] @ozkiff: https://habrahabr.ru/users/ozkriff
[12] @snuk182: https://habrahabr.ru/users/snuk182
[13] @vessd: https://habrahabr.ru/users/vessd
[14] Источник: https://habrahabr.ru/post/322140/?utm_source=habrahabr&utm_medium=rss&utm_campaign=best
Нажмите здесь для печати.