Keyboard shortcuts

Press ← or → to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Определение Pin

// Copyright 2026 Google LLC
// SPDX-License-Identifier: Apache-2.0

#[repr(transparent)]
pub struct Pin<Ptr> {
    pointer: Ptr,
}

impl<Ptr: Deref<Target: Unpin>> Pin<Ptr> {
    pub fn new(pointer: Ptr) -> Pin<Ptr> { ... }
}

impl<Ptr: Deref> Pin<Ptr> {
    pub unsafe fn new_unchecked(pointer: Ptr) -> Pin<Ptr> { ... }
}
This slide should take about 5 minutes.

Pin — минимальная обёртка вокруг pointer type, то есть типа, который реализует Deref.

Однако Pin::new() принимает только типы, которые разыменовываются в цель, реализующую Unpin (Deref<Target: Unpin>). Это позволяет Pin полагаться на систему типов для обеспечения своих гарантий.

Типы, которые не реализуют Unpin, то есть требующие pinning, должны создавать Pin через небезопасный Pin::new_unchecked().

Замечание: в отличие от других пар методов new()/new_unchecked(), new не выполняет проверок во время выполнения. Проверка — это проверка на этапе компиляции без накладных расходов.