IT-словарь › Программирование › Проекция Pin

Проекция Pin

Программирование Svenska → Обновлено: 2026-10-19

Вопрос о том, закреплено ли поле внутри закреплённой структуры. Ответ Rust: выбирать нужно для каждого поля отдельно, и этот выбор — часть контракта типа.

Предыстория такова: блок async компилируется в конечный автомат, который может хранить ссылки на самого себя, а значит, после начала работы его нельзя перемещать в памяти. Rust выражает это обёрткой, обещающей, что то, на что она указывает, останется на месте. Проблема возникает, когда вы пишете собственный future из других future: чтобы продвинуть внутреннее поле, нужно от обещания о всей структуре перейти к обещанию об этом конкретном поле. Это разрешено, но только если вы одновременно обязуетесь никогда не вынимать поле из структуры, не выдавать обычную изменяемую ссылку на него и не перемещать его в собственном деструкторе. Условия легко упустить, поэтому проекцию почти всегда делают макросами из семейства pin-project, а не вручную.

← Назад к словарю