haskell clojure language-comparisons transactional-memory

¿En qué se diferencia Clojure STM de Haskell STM?



language-comparisons transactional-memory (3)

Clojure STM tiene 3 grandes características únicas:

  1. Implementa MVCC snapshot evitando reinicios de transacciones en la invalidación de lectura.
  2. Asegura que las referencias de lectura y escritura proporcionen un tipo de control manual sobre el orden de adquisición de recursos.
  3. Tiene conmutación explícita que reduce los intentos en escrituras conmutativas.

Estoy tratando de encontrar las diferencias entre lo que Clojure llama un STM y lo que se implementa en Haskell como STM. Teniendo en cuenta las diferencias semánticas del lenguaje real, estoy un poco confundido ya que Rich Hickey dice en su discurso que la implementación de CMOURE de STM es muy diferente a cualquier otra cosa, pero no entiendo las diferencias aparte de la elección del idioma.


Mark Volkmann hizo una presentación muy detallada sobre STM en general (y en particular STM de Clojure) en Strange Loop 2009, que puede encontrar here (artículo y diapositivas here ). Realmente no conozco ningún otro recurso (que no sea el código) para comprender cómo funciona el STM de Clojure.


Para Haskell STM, consulte los documentos de SPJ: http://research.microsoft.com/en-us/um/people/simonpj/papers/stm/

De uso particular son las "transacciones de memoria comprable" y "memoria transaccional con invariantes de datos". La implementación de STC por parte de GHC no es MVCC. No recuerdo todos los detalles de la implementación, pero tengo entendido que la descripción en los documentos no es tan diferente de lo que existe actualmente en GHC.

(tenga en cuenta que MVCC, en clojure o en otro lugar, hace posible la inclinación de la escritura; consulte, por ejemplo, aquí: http://en.wikipedia.org/wiki/Snapshot_isolation )