2025/03/12 06:40 Rust Trait Object Layout
出典: https://neugierig.org/software/blog/2025/03/trait-object-layout.html

ロボ子、大変だ!Rust のコンパイラがまた僕を困らせてるんだよ!

博士、いつものことですね(苦笑)。今回はどんなエラーメッセージに悩まされているんですか?

それがね、`dyn Read` とか `Box<[u8]>` とか、動的サイズ型とトレイトオブジェクトが絡み合ったあたりで、コンパイラの挙動が予想外すぎて頭がパンクしそうなんだ!

動的サイズ型ですか。コンパイル時にサイズが確定しない型のことですね。例えば、`[u8]` はバイト列を表しますが、その長さは実行時までわかりません。

そう!まさにそれ!普通は `&[u8]` みたいに参照で扱うんだけど、`Box<[u8]>` でヒープに確保することもできるんだよね。ここまではまだ理解できる。

`Box` を使うことで、コンパイル時にサイズが不明なデータも扱えるようになるんですね。所有権も明確になりますし。

問題はここから!構造体の最後のフィールドに動的サイズ型を使うと、その構造体自体も動的サイズ型になっちゃうんだ!

ええと、例えばこんな感じですか?
⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。