構造化された値を記述する Graphviz ファイルを取得しようとしています。これは診断目的であるため、グラフにメモリ内の実際の構造をできるだけ厳密に反映させたいと考えています。以下を使用して値を Graphviz 頂点にマップし、値に 2 つ以上のインバウンド参照がある場合に頂点を再利用できるようにします。
let same = (==)
module StateIdentity : Hashtbl.HashedType = struct
type t = R.meta_t state
let hash = Hashtbl.hash
let equal = same
end
module StateHashtbl = Hashtbl.Make (StateIdentity)
のドキュメントは、いつHashtbl.hash
でもいつでも使用するのに適していることを示唆していますが、ハッシュテーブルへのアクセスが可能な限り O(1) に近いことを確認したいので、(この場合は潜在的に大きい) オブジェクトをウォークしたくありませんルックアップごとにグラフ化します。StateIdentity.equal = (=)
StateIdentity.equal = (==)
Hashtbl.hash
Ocaml が参照を移動することは知っていますが、Ocaml で使用できる参照 ID の O(1) プロキシはありますか?
Ocaml の変更可能な変数の Hashtableに対する答えは、そうではないことを示唆しています。
これは診断コードであるため、状態にシリアル番号を付けるのは嫌いです。これにより発生するエラーは、他のバグを隠す可能性があります。