Rust でのモデル化

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

/// 生ポインタ
pub struct SelfReferentialBuffer {
    data: [u8; 1024],
    cursor: *mut u8,
}

/// 整数オフセット
pub struct SelfReferentialBuffer {
    data: [u8; 1024],
    cursor: usize,
}

/// Pinning
pub struct SelfReferentialBuffer {
    data: [u8; 1024],
    cursor: *mut u8,
    _pin: std::marker::PhantomPinned,
}

参考: 元の C++ クラス定義

class SelfReferentialBuffer {
    char data[1024];
    char* cursor;
};

次の数枚のスライドでは、元の C++ と同じセマンティクスを持つ Rust の型を作成するための 3 つのアプローチを示します。

  • 生ポインタを使用する: C++ に非常に近いですが、得られる型の使用は極めて危険です
  • 整数オフセットを保存する: Rust ではより自然ですが、参照は手動で作成する必要があります
  • Pinning: より少ない unsafe ブロックで生ポインタを扱えます