Frage

Ich versuche, die Unterschiede zwischen dem, was Clojure als STM bezeichnet, und dem, was in Haskell als STM implementiert wird, zu finden. Nehmen Sie die tatsächlichen sprachlichen semantischen Unterschiede beiseite. Ich bin ein wenig verwirrt, wie reicher Hickey in seiner Rede sagt, dass Clojure die Implementierung von STM sehr von allem anderen unterscheidet, aber ich verstehe die Unterschiede nicht von der Sprachauswahl.

War es hilfreich?

Lösung

Clojure STM hat 3 große einzigartige Funktionen:

  1. Implementiert MVCC -Snapshot, das Transaktionen zum Vermeiden von Transaktionen beim Lesen von Invalidierung vermeidet.
  2. Versichert die Referenzen auf Read-Writes eine Art manueller Steuerung über die Ressourcenerwerbreihenfolge.
  3. Hat explizite Pendelverkehr, der die Wiederholung von kommutativen Schreibvorgängen reduziert.

Andere Tipps

Für Haskell STM finden Sie die Papiere von SPJ: http://research.microsoft.com/en-us/um/people/simonpj/papers/stm/

Von besonderer Verwendung sind "komponierbare Speichertransaktionen" und "Transaktionsspeicher mit Dateninvarianten". Die Umsetzung von STM durch GHC ist in der Tat nicht MVCC. Ich erinnere mich nicht an alle Implementierungsdetails, aber mein Verständnis ist, dass die Beschreibung in den Papieren nicht so unterschiedlich ist, was derzeit in GHC existiert.

(Beachten Sie, dass MVCC in Clojure oder anderswo Schreibwesen ermöglicht-siehe, z. B. hier: http://en.wikipedia.org/wiki/snapshot_isolation)

Mark Volkmann hat eine sehr detaillierte Präsentation über STMS im Allgemeinen (und Clojure's STM im Besonderen) auf Strange Loop 2009 gemacht, die Sie finden können hier (Artikel und Folien hier). Ich kenne keine andere Ressource (außer dem Code), um zu verstehen, wie die STM von Clojure funktioniert.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top