Keyboard shortcuts

Press ← or → to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Моделирование на 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