islands5 blog

日々起こったことを共有したり、思ったこと、勉強したことを書いていくブログ。普段はRailsやAWSを活用したWeb系の開発をやってます。

Rust を始めてみている(Box<dyn Hoge> について)

関数の返り値に Box と返す箇所があり、「はて??」となった箇所があったので少し調べた

ドキュメントによると

Rustのコンパイラはあらゆる関数のリターン型に必要なスペースを知っておく必要があります。... そのトレイトの異なる実装はそれぞれ別の量のメモリを必要とするからです。

dynを利用してトレイトを返す - Rust By Example 日本語版

なるほど、参照だったらどんなサイズが入るか決まるので、必要なスペースがコンパイラもわかるよってことみたいです
本の例だと、BufReadトレイトを File.open, std::io::stdin が実装してるので利用していたということでした

Box と dyn は組み合わせて使うものなのかな〜と思って調べたら、深淵にハマりそうだったのでまた後日...

Box はヒープメモリ確保に関連
dyn は... まだようわからん
戻り値がどのような特徴を持つ型になるかどうかで変わる様子(impl Trait というものもあるそう)

少しずつ深堀っていければいいと思う

参考リンク
dynを利用してトレイトを返す - Rust By Example 日本語版 Box, スタックとヒープ - Rust By Example 日本語版 Rustのdyn Traitとimpl Traitの違いについて 安定化間近!Rustのimpl Traitを今こそ理解する - 簡潔なQ