機能的なデータ構造(構造を共有できる複数のバージョンのデータ)を活用したいが、それを命令的なスタイルで変更できるようにしたい。copy-on-write機能を備えた純粋に機能的なデータ構造ですか?
私が考えているのは、ゲームの履歴がすべて保存されているRPGゲームです(たとえば、時間通りに戻ることができるようにするため)。コピーオンライトを使用すると、ゲームの状態を保持している構造を単純に複製し、新しいターンを導入することで変更することができますが、以前のターン(必ずしもすべてではないかもしれません。毎回すべてをコピーしなければならないという不利益を被る。
たとえば、foo
は地図です。
bar = foo.clone()
foo
の構造体(ツリーなど)はまだコピーされません。しかし、今から のbar
はコピーとして扱われ、 を `foo 'に戻すことはできません。
baz = bar[someKey]
baz.modifyInSomeWay()
今
- 新しいオブジェクトが作成されます、それは
baz
の修正されたコピーです。 bar
は、新しいbaz
(おそらく の一部を保持し、foo
の構造の一部)を保持する新しいマップに置き換えられます。foo
は影響を受けません。
しかし、我々は、その後なければ...
baz.modifyAgain()
我々はそれの最新バージョンを持っているので... baz
だけで、変更することができます。 bar
を変更する必要はありません。
このすべては がfoo.clone()
にそれを増やし、foo
とbar
に関するいくつかのバージョン情報を保持し、何とかbaz
に渡す(それ プロキシオブジェクト行うことで?)が必要です。
また、複製された構造の一部は「履歴の一部」 になり、実行時に強制変更することはできません。
これでは、JavaScriptのプロトタイプを少し似ているが、変更 が上向きに伝播することができますように私はそれがより多くのです。私はバージョンコントロールシステムのようなものだと思う。
- これが行われていますか、どの程度ですか?
- これは良い考えですか?そうでない場合、それを保存する方法はありますか?
- どのように実装できますか?私はPythonのような高水準のGC-ed言語の上に構築することを考えていました。
おそらく[pyrsistent](https://github.com/tobgu/pyrsistent)はあなたが探しているものです – CAMOBAP