J'essaie de trouver les différences entre ce que Clojure appelle un STM et ce qui est implémenté dans Haskell en tant que STM. Mis à part les différences sémantiques de langage, je suis un peu confus lorsque Rich Hickey dit dans son discours que la mise en œuvre de STM par Clojure est très différente de tout ce qui existe ailleurs, mais je ne comprends pas les différences en dehors du choix de langue.
Réponses
Trop de publicités?Clojure STM possède 3 grandes caractéristiques uniques:
- Tout d’abord, qui implémente l’intervalle instantané MVCC en évitant les transactions, redémarre après une invalidation en lecture.
- Assurez-vous que les références en lecture-écriture fournissent une sorte de contrôle manuel de la commande d’acquisition des ressources.
- Dispose d'une commutation explicite qui réduit les tentatives sur les écritures commutatives.
Pour Haskell, STM, voir SPJ de documents: http://research.microsoft.com/en-us/um/people/simonpj/papers/stm/
De particulier à utiliser sont "Composable mémoire transactions" et "la mémoire Transactionnelle avec les données invariants". GHC la mise en œuvre de la STM, en effet, n'est-ce pas MVCC. Je ne me souviens pas de tous les détails de l'implémentation, mais ma compréhension est que la description dans les journaux n'est pas différent de ce qui existe actuellement dans GHC.
(notez que MVCC, en clojure ou ailleurs, rend possible l'écriture d'inclinaison -- voir, par exemple, ici: http://en.wikipedia.org/wiki/Snapshot_isolation)
Mark Volkmann a fait une présentation très détaillée sur les STM en général (et la STM de Clojure en particulier) à Strange Loop 2009 que vous pouvez trouver ici . Je ne connais pas vraiment d'autre ressource (que le code) pour comprendre le fonctionnement du STM de Clojure.