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> { ... }
}

Pinポインタ型 に対する最小限のラッパーであり、ポインタ型 とは Deref を実装する型として定義されます。

ただし、Pin::new() が受け付けるのは、Unpin を実装するターゲットにデリファレンスされる型 (Deref<Target: Unpin>) のみです。これにより、Pin は型システムにその保証の強制を委ねることができます。

Unpin を実装しない型、すなわち pinning を必要とする型は、unsafe な Pin::new_unchecked() を介して Pin を作成しなければなりません。

補足: 他の new()/new_unchecked() メソッドの組とは異なり、new は実行時チェックを一切行いません。このチェックはゼロコストのコンパイル時チェックです。