私はCourseraでMartinOderskyのscalaクラスを終えたところです。Scalaは私の最初のFP言語であり、可変状態を制限するというアイデアに興奮しました。これにより、並行性が大幅に向上し、コードの保守が非常に容易になります。
これらすべてを学びながら、可変変数がなく、不変オブジェクトのみを参照している限り、オブジェクトの可変性を保証できることに気付きました。これで、古い状態を変更する代わりに新しい状態を作成することですべてを実行できるようになりました。可能な場合は末尾再帰を使用してください。
素晴らしい。だから私はこれまでのところチェーンの上流でしかこれを行うことができません。ある時点で、アプリケーションは既存の状態を変更できる必要があります。私はこの時点で並行性制御をどこに置くかを知っています、ロック、何とか何とか。私は今でも、いつも使用している標準のマルチスレッド同時実行制御をデフォルトにしています。
ああ、scalaコミュニティ、もっと良い方法はありますか?モナド多分?
編集:この質問は少し一般的であるため、ユースケースを示したいと思いました。データのいくつかのコレクションを格納する機械学習アルゴリズムがあります。これらには、データの更新された表現(トレーニングなど)をすべて不変で返す関数があります。最終的には、このreturn-updated-stateパターンを、シミュレーションを実行している実際のオブジェクトへのチェーンを上っていくことができます。これは変更可能な状態であり、コレクションへの参照を保持します。マルチコアまたはマルチシステムに配布したい場合があります。