6

Clojure がソフトウェア トランザクショナル メモリを実装しており、Microsoft が C# の作業を完了しておらず、ここで説明されている STM の実装を非現実的なものにするいくつかの問題に気付いたのに、それに問題が見られないという可能性はどのようにあるのか疑問に思っています: http: //www.bluebytesoftware.com/blog/2010/01/03/ABriefRetrospectiveOnTransactionalMemory.aspx

何かアイデアはありますか?

4

2 に答える 2

5

Clojure は、言語設計と言語の使用方法に影響を与え、STM を実用的なものにする言語のほぼ初期から STM で開始しました。C# は、既存の言語とそれを使用する既存の方法の両方から開始する必要があったため、より困難な問題が生じました。最も重要と思われる違いは、Clojure の STM が、言語のコアにある不変データから始まり、その上に ID の概念を構築し、STM が ID の概念の上に構築されることです。STM にはさまざまな種類があり、clojure の STM は非常に異なっていることにも注意してください。

于 2013-06-24T17:07:20.860 に答える
3

STMにはさまざまなアプローチがあります。これは、「型システム」のような非常に幅広いトピックです。あるアプローチは簡単に成功しますが、他のアプローチはさまざまな理由で失敗します。

Clojure の STM には、以前のアプローチよりも実用的で効果的なものにするいくつかの設計上の決定があります。

  • STM で任意のデータを保護しようとはしません。 ( など) のような特別な管理参照を使用する必要がありますref。これにより、以前の多くの STM アプローチよりもはるかに単純で焦点を絞った設計になります (これには、少なくとも上記のリンク先の記事で説明されているように、Microsoft のアプローチが含まれます)。
  • 不変データによるマルチバージョン同時実行制御を使用します。これにより、トランザクション処理がより効果的かつ実用的になります。特に、非トランザクション読み取りにはロックが必要ないことを意味し、これはパフォーマンスの大幅な向上です....
  • これは関数型言語のコンテキストで行われます。特に、Clojure のほとんどのコードはデフォルトで副作用がないという事実により、トランザクションの再試行などの手法の適用がはるかに簡単になります。

これらの設計上の決定の結果として、Clojure の STM は以前の STM アプローチとは非常に異なる獣であり、その斬新な設計のために成功したと思います。以下のビデオは少し古いですが、その仕組みの概要を知りたい場合に最適です。

http://www.infoq.com/presentations/Value-Identity-State-Rich-Hickey

于 2013-06-26T16:59:57.293 に答える