我想要具有功能數據結構(可以共享結構的多個數據版本的數據)的優點,但是能夠以一種命令式樣對其進行修改。具有寫入時複製功能的純功能數據結構?
我在想什麼(以及可能的用途):一個RPG遊戲,其中存儲了整個遊戲歷史記錄(例如,以便及時返回)。使用寫時複製,我可以簡單地克隆持有遊戲狀態的結構,並通過引入新的轉變來修改它 - 但是可以訪問較早的轉向(不一定全部都是這樣,也許只是選定的遊戲狀態快照),而沒有每次都必須複製一切的懲罰。
比方說foo
是一張地圖。
bar = foo.clone()
沒有任何foo
的結構(例如樹)被複制。然而, 從現在開始bar
被視爲一個副本,並且不允許更改傳播 回到`foo'。
baz = bar[someKey]
baz.modifyInSomeWay()
現在
- 一個新的對象被創建,那就是
baz
一個修改後的副本。 bar
被替換爲新地圖,保存新的baz
(可能保留 一些foo
的結構)。foo
不受影響。
但是,如果我們再這樣做......
baz.modifyAgain()
... baz
可剛修改的,因爲我們有一個最近的版本,它。 bar
不需要更改。
所有這些都需要保持一些版本信息有關foo
和bar
, 增加它foo.clone()
,並將它傳遞給baz
某種方式(通過使 代理對象?)。
另外,已經被克隆的任何結構部分都成爲'歷史的一部分' 並且不能再被改變,這可以在運行時被強制執行。
這類似於JavaScript的原型了一點,但我它更因爲它允許更改 向上傳播。我認爲它會像版本控制系統。
- 這樣做了,到了什麼程度?
- 這是個好主意嗎?如果沒有,是否有辦法保存它?
- 它如何實現?我正在考慮在Python等高級GC-ed語言之上構建它。
可能[pyrsistent](https://github.com/tobgu/pyrsistent)是什麼你在尋找 – CAMOBAP