私はC ++で不変オブジェクトの使用を練習しています。私の個人的な目標は、一連の不変グラフで(ヒープ内の)汎用オブジェクトグラフを表現することです。
マルチバージョングラフ自体の作成はそれほど難しくありません。問題はパフォーマンスです。ブルートフォースバージョン管理にはグラフの完全なコピーが必要であり、これは受け入れられませんでした。
変更されていないノードを共有しようとしました。しかし、この場合、新しい問題が発生しました。参照。他のオブジェクトへの参照は、グラフ全体で更新する必要があります。これは、新しいグラフバージョンを導出するたびにすべてのノードを訪問する必要があります。また、これによりノードが参照で変更されるため、ノードも(コピーすることによって)派生する必要があります。総当たりコピーよりもパフォーマンスはそれほど良くありません。
私が想像できる限り、オブジェクトグラフの変化を不変状態で表現するための実際の効率的な方法はありません。だから私はこれに関するいくつかのアイデアを求めています。
不変状態でオブジェクトグラフの突然変異を効率的に表現することは可能ですか?