機能的なデータ構造 (構造を共有できる複数のバージョンのデータ) の利点を生かしながら、命令型のスタイルで変更できるようにしたい。
私が考えていること (および考えられる用途): ゲーム履歴全体が保存される RPG ゲーム (たとえば、時間をさかのぼることができるようにするため)。コピー オン ライトを使用して、ゲームの状態を保持する構造を単純に複製し、新しいターンを導入することでそれを変更することができました。毎回すべてをコピーしなければならないというペナルティ。
foo
地図だとしましょう。
bar = foo.clone()
foo
の構造 (ツリーなど) はまだコピーされていません。ただし、bar
今後はコピーとして扱われ、変更が「foo」に伝播することは許可されません。
baz = bar[someKey]
baz.modifyInSomeWay()
今
- の変更されたコピーである新しいオブジェクトが作成されます
baz
。 bar
は新しいマップに置き換えられ、newが保持されbaz
ます (おそらくfoo
の構造の一部が保持されます)。foo
影響を受けません。
しかし、もしそうなら...
baz.modifyAgain()
...baz
最新バージョンがあるため、変更するだけです。bar
変更する必要はありません。
foo
これにはすべて、とに関するいくつかのバージョン情報を保持し、bar
でそれを増やし、何らかの形で (プロキシ オブジェクトにすることで?) にfoo.clone()
渡す必要があります。baz
また、複製された構造の一部は「履歴の一部」になり、それ以上変更することはできず、実行時に強制することができます。
これは JavaScript のプロトタイプに少し似ていますが、変更が上方に伝播できるため、より似ています。バージョン管理システムのようなものになると思います。
- これは行われましたか、またどの程度行われましたか?
- これは良い考えですか?そうでない場合、保存する方法はありますか?
- どのように実装できますか?Python のような高水準の GC 言語の上に構築することを考えていました。