私はF#を初めて使っています。だから、おそらく解決策は誰かには分かりますが、見つけられません。
ワールドチャンク(Minecraftに似ています)のゲーム世界を想像してください。
C++、java、C#などの理論言語では、同時に複数のチャンクを変更できます。 2人以上のプレイヤーがブロックを別々のチャンクに配置または削除しようとします。これらのアクションは、各チャンク内に複数のアクションが発生していない限り、互いに影響を与えずに世界の状態を変えることができます。シリアライズは、1つのチャンク内の複数のプレーヤーが変更を実行する場合にのみ発生します。F#複数のスレッドで同時にリストを更新する
のF#の私の理解では、更新機能がactual world state
update params(like add/remove blok)
を必要とnew world state
を返すので、私は、全世界で同時期に発生する可能性がグローバルレベルでのこれらのアクションなし2つのアクションをシリアル化する必要があります。
world state
にはchunk list
が含まれています。
世界の更新を並行して行う方法はありますか?
world state
を別々に保存して、複数のチャンクに同時に更新することはできますか?
ほとんどのゲーム関連のコードでは、 'list'セマンティクスが特に必要な場合を除いて' list'の代わりに 'array'を使用します(前の項目の不変な追加と削除)。配列は、固定サイズ以上のマッピングをしている場合は通常より高速です。 – TheQuickBrownFox
'array'または' list'は、私が記述しようとする問題のために重要ではありません。私がF#を正しく理解していれば、 'array'または' list'要素を変更することはできません。変更された要素で 'array'または' list'を作成する必要があります。 'または' lists'が適用されます。 – Jakub
実際には配列は変更可能なので、要素を変更することはできますが、私はあなたにそれを提案していませんでした。私はあなたがゲームについて話しているので、配列はパフォーマンスの良いデフォルトです。 – TheQuickBrownFox