Pin
ほとんどのデータ構造はメモリ上の位置を変更してもmemcpyで別の場所にコピーして移せばよい
しかし、自己参照構造体のように自身の”アドレス"を持つ構造体はそうはいかない
なので、メモリ上の位置を移動してはいけない、という契約を示す何かが必要となった
ほとんどの型は移動可能なので、デフォルトで暗黙的にUnpinというトレイトを実装しておき
それを外して「移動不可能」にマークしたい場合のみ !Unpin という形にする。
移動不可能な値へのポインターをラップした形として Pin<Ptr> がある
pin の詳細には立ち入りませんが、ここで押さえておくべきことは、参照に対して .await をするためには、参照される値が pin されているか、Unpin を実装している必要がある、ということです。
https://zenn.dev/magurotuna/books/tokio-tutorial-ja/viewer/select
参考資料:
https://tech-blog.optim.co.jp/entry/2020/03/05/160000
https://blog.wbcchsyn.net/1592496032.html
https://blog.cloudflare.com/pin-and-unpin-in-rust/
https://docs.google.com/presentation/d/1SnlghUYWG6Bjnene6BONJIPvcBKGrQw6ZhmYSHAcYHs/edit#slide=id.p