静的にサイズが決まる型と動的にサイズが決まる型

// 著作権 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 であることをオプトアウトしていないすべての型パラメータにも自動的に追加されます。

  • ほとんどの型は Sized を実装しています。つまり、それらのサイズはコンパイル時にわかります。

    [T]strdyn Trait のような型は、いずれも動的サイズ型です。それらのサイズは、その型の値への参照の一部として格納されます。

  • 型パラメータは、特に指定しない限り自動的に Sized を実装します。

参考:

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