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ブロックで生ポインタを扱えます