Типы известного размера и динамически размерные типы
// 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