報 2024-06-16

Report/2024-06-01/2024-06-16

う~ん振り返ってみるとあんまりトピックがなくて調子悪いなと思います。仕事は結構楽しいんですけどね。あんまり元気って感じではなかったですね。

パソコン

卒研関係でずっと MIR (Rust の中間言語です) をいじっています。MIR を構成する種々の型は Debug にいい感じの実装があたっていて、適当に画面に出す分にはまあ見た目はいいんだけど、実際どのバリアントから来た何なのかぜんぜんわかんなくて普通に困る...

さて、MIR ではだいたいのものがアリーナで確保されていて 'tcx と書かれるライフライムで引き回されています。https://rustc-dev-guide.rust-lang.org/memory.html

つまりいろいろなものが &'tcx で存在しているんですね。これはまあ Copy で愉快ですねとかはありますけど全然それどころではなくてアリーナへのアクセス TyCtxt<'tcx> がないと値をろくに生成できないということを意味しています。MIR を読むだけならまあいいんですが、ちょっと加工したいとかがあると途端に TyCtxt<'tcx> がないと無理になる。リストですらアリーナにいるのでデリファレンスを一個足すとかでも TyCtxt<'tcx> がいないと無理ですよ。 https://doc.rust-lang.org/nightly/nightly-rustc/rustc_middle/mir/struct.Place.html

で、TyCtxt<'tcx> はなんか見た目がうっとうしいから最初はこいつなしで頑張っていこうみたいな気分になっちゃうんですけど、上述の理由でマジでやめたほうがいいです。TyCtxt<'tcx> を持たないロジックはデータモデルから完全に切るべき。その覚悟がないなら常に TyCtxt<'tcx> を持ってまわるのが丸いでしょう。別に TyCtxt<'tcx>: Copy だからもう本当に軽い気持ちでフィールドに持っておけばいいんじゃないでしょうか。

これはスーパーボディ。語感がおもしろいと思います。 https://doc.rust-lang.org/nightly/nightly-rustc/rustc_middle/mir/visit/trait.Visitor.html#method.super_body

あと MIR のまわりでおもしろいのは IndexVec<I, T> ですね。こいつはまあ Vec<T> のインデックスを適当な newtype でやるというだけなんですけど、値の生成と管理が自然と同時に起きるようになるのでそこそこ物事がわかりやすくなっている感じがします。簡単なリポジトリみたいな、感じでしょうか https://doc.rust-lang.org/nightly/nightly-rustc/rustc_index/vec/struct.IndexVec.html

Idx な型はこいつで生成できる https://doc.rust-lang.org/nightly/nightly-rustc/rustc_index/macro.newtype_index.html

良かった曲

MANIBA & Sydney Jo Jackson - Too Late To Say Sorry https://open.spotify.com/intl-ja/track/2ML4DCDP2d0xg9O6Haatin?si=1c59f7685b424a77 最近は一生ピアノハウスをかけている。きもちえ~

OFFAIAH - Hands https://open.spotify.com/intl-ja/track/5u1mG6G7YKeI7mmebulqUT?si=1cb677bb20244dbc 昼休みにかけてたら完全に気持ちになってしまった。仕事に支障がある

NUZB & Quickbuck - Give All https://open.spotify.com/intl-ja/track/6ck6J9O3UUSSSbPpP7r3O1?si=6e2e13ba40574b6c これ GA と同様の風吹きすぎてて流石に腕折れたわ流石に