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

Типы известного размера и динамически размерные типы

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

use std::fmt::Debug;

pub struct AlwaysSized<T /* : Sized */>(T);

pub struct OptionallySized<T: ?Sized>(T);

type Dyn1 = OptionallySized<dyn Debug>;
  • Мотивация: возможность различать типы, размер которых известен на этапе компиляции, и типы, размер которых известен во время выполнения, полезна для

  • Трейт Sized автоматически реализуется типами, размер которых известен на этапе компиляции.

    Этот трейт также автоматически добавляется к любому параметру типа, который не отказался от того, чтобы быть размерным.

  • Большинство типов реализуют Sized: их размер известен на этапе компиляции.

    Типы вроде [T], str и dyn Trait — динамически размерные. Их размер хранится как часть ссылки на значение этого типа.

  • Параметры типа по умолчанию реализуют Sized, если не указано иное.

Справка:

  • https://doc.rust-lang.org/stable/reference/dynamically-sized-types.html#r-dynamic-sized