ぷろみん

プログラミング的な内容を扱ってます

Rustでプロファイリングの可視化

github.com

Rustのプロファイラを書きました。
正直Rustの知識が浅いのでまともなプロファイラが書けるとは思っていないのでプロファイラ部分はおまけでTrace Event Formatへのシリアライズ定義が本体かなと思っています。
タイムスタンプにオフセットかけたりしたかったのですがserdeでシリアライズ可能にしたTrace Event Format定義が複雑過ぎて悩んでいます。
現状だとPhase毎に追加しないといけなくなりそう。

derive_builderがenum定義のビルドがそのままではできないことも難しい。

rust-derive-builder/build_method.rs at v0.9.0 · colin-kiegel/rust-derive-builder · GitHub

の定義だと

enum Type {
  A { value: u32 },
  B { value: u64 },
}

のような定義、T::Aのビルダーを作成することができない。
struct定義をenumの外部に配置するとできるが、今度はserdeによる自動シリアライズが上手くいかない。

文字列の管理に関してもラベルテーブルのようなものを用意して割り当てることが妥当だがシリアライズとの兼ね合いが難しい。

しかし、Rustの構文木を変更できるマクロやアトリビュートには可能性を感じますね。 RustでRustのコードを生成している様子はリフレクションの未来を感じました。