私は、ClojureがSTMと呼ぶものと、HaskellでSTMとして実装されるものとの違いを見つけようとしています。リッチ・ヒッキーはスピーチで、ClojureのSTMの実装は他のものとは非常に異なっていると言っていますが、実際の言語の意味の違いを除いて少し混乱していますが、言語の選択とは別の違いについてはわかりません。Clojure STMとHaskell STMの違いは何ですか?
答えて
ClojureのSTMは、3つの大ユニークな特徴を持っています
- は読み取り無効に取引の再起動を回避MVCCスナップショットを実装します。
- 読み取り書き込みに対する参照が、リソース取得順序の一種の手動制御を提供するようにします。
- 交換可能な書き込みの再試行を減らす明示的な通勤があります。
、SPJの論文を参照してください。特定の利用http://research.microsoft.com/en-us/um/people/simonpj/papers/stm/
は、「構成可能メモリトランザクション」であり、「データの不変量とトランザクショナルメモリ」。 GHCのSTMの実装は実際にはMVCCではありません。私はすべての実装の詳細を思い出しませんが、私の理解は、論文の記述が現在GHCに存在するものとは全く異なるわけではないということです。
(MVCC、Clojureの中や他の場所では、可能な書き込みスキューを作ることに注意してください - 例えば、ここでは、以下を参照してください。http://en.wikipedia.org/wiki/Snapshot_isolation)を
GHCの実装は、副作用に関するトランザクションの安全性のコンパイル時の保証を提供することも注目に値する。トランザクションをアトミックに構成するためのユニークな「orElse」コンビネータです。 –
@DonStewartさらに、Haskellの 'STM'は' MonadPlus'であり、トランザクションコンテキスト内で追加の失敗条件を指定することができます。最終勘定残高が負であれば、txnに失敗/再試行する。また、他の 'MonadPlus'クラスとそのロジックを簡単に共有することもできます。同じ機能は、アカウントと購入の 'リスト 'が与えられた場合、すべての*潜在的な有効なトランザクションの結果を示します。これは、ロジックが複雑な場合に便利です。私はどちらもクロージャーでは可能ではないと思う。 –
- 1. Clojure STMメモリ不足
- 2. Haskell STMと再試行
- 3. ClojureのSTMとの並行性
- 4. Clojure、Haskell(および他の言語)でSTM用に使用されるアルゴリズムは何ですか?
- 5. ClojureのSTMの値の履歴にアクセスできますか?
- 6. STMと発信IO
- 7. TChanの書き込みはHaskell STMに統合されていますか?
- 8. STMトランザクションにClojureのハッシュマップの過負荷を
- 9. stmモデルを評価する
- 10. ARM LDMとSTMのwrtデータキャッシュとデータバス
- 11. STMへのメタデータの追加R
- 12. 純粋にSTM関数をテストする
- 13. Pythonコード/ STM CRC32関数の改良
- 14. Clojureで自分のSTMのロールバック数を確認する方法はありますか?
- 15. デュースstmを使用してトランザクション
- 16. 変更ログとしてのSTMにやさしいリスト
- 17. クロージャの「公式」並行処理の例(ロック、アトム、stmを使用)
- 18. 大規模なデータセットでClojure STMを使用した経験はありますか?
- 19. 最新のバージョンではAkka STMがサポートされていないようです
- 20. STMモデルが収束するとRがクラッシュする
- 21. Clojureでwith-redefsとwith-redefs-fnの違いは何ですか?
- 22. Clojureのseqとシーケンスの違いは何ですか?
- 23. Clojureのdefとdefonceの違いは何ですか?
- 24. Lisp/Clojureのプロシージャと# 'プロシージャの違いは何ですか?
- 25. Clojure:[Dと[Ljava.lang.Double;の違いは何ですか?
- 26. Haskellの型コンストラクタとjavaジェネリック型の違いは何ですか?
- 27. Data Parallel HaskellのPArrayと[::]の違いは何ですか?
- 28. Haskellの型とデータ型の違いは何ですか?
- 29. GHCとHaskell Platformの違いは何ですか?
- 30. バージョン間の接尾辞の矛盾(sbt、Scala-STM、Play-JSON)
非トランザクションは、このリストに読み込むためにあなたもゼロオーバーヘッドを追加するのでしょうか? – mikera
非トランザクションコンテキストを使用しても、STMを検討して他のトランザクションを再試行すると、コンテキストスワップによってパフォーマンスが低下するかどうかはわかりません.JVMは非常に成熟しており、STMはGC ...非常に必要なので、そのように考えてください –
こんにちはウィリアム。 Mark volkmannの記事とプレゼンテーションを読んだとき、彼は "Rexの履歴リストにtxnが始まる前にコミットされた値が含まれている場合、読み取りはClojureで再試行をトリガーするだけです"と述べました。上記の最初の機能は正しいですか? – CHAPa