Определение 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 не выполняет проверок во время выполнения. Проверка — это проверка на этапе компиляции без накладных расходов.