Моделирование на 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;
};
Следующие слайды показывают три подхода к созданию типа на Rust с той же семантикой, что и исходный C++.
- Сырые указатели: очень близко повторяют C++, но работа с получившимся типом крайне опасна
- Хранение целочисленных смещений: более естественно для Rust, но ссылки приходится создавать вручную
- Pinning: позволяет использовать сырые указатели с меньшим количеством блоков
unsafe