Come fa Clojure STM differisce da Haskell STM?
-
14-10-2019 - |
Domanda
Sto cercando di trovare le differenze tra ciò che Clojure chiama uno STM e ciò che è implementato in Haskell come STM. Prendendo le lingua attuale differenze semantiche parte sono un po 'confuso, come Rich Hickey dice nel suo discorso che l'attuazione di Clojure di STM è molto diverso da qualsiasi cosa là il resto fuori, ma non capisco le differenze a parte la scelta della lingua.
Soluzione
Clojure STM ha 3 grandi caratteristiche uniche:
- Utensili MVCC snapshot evitando operazioni di riavvio sulla invalidazione di lettura.
- riferimenti assicura su read-scrive fornisce una sorta di controllo manuale ordine di acquisizione delle risorse.
- ha pendolari esplicito che riduce tentativi sulla scrittura commutativa.
Altri suggerimenti
Per Haskell STM, vedere le carte di SPJ: http: / /research.microsoft.com/en-us/um/people/simonpj/papers/stm/
Di particolare l'uso sono "operazioni di memoria Composable" e "memoria transazionale con invarianti di dati". implementazione di GHC di STM in effetti non è MVCC. Non ricordo tutti i dettagli di implementazione, ma la mia comprensione è che la descrizione sui giornali non è poi così diverso da quello che esiste attualmente in GHC.
(si noti che MVCC, in clojure o altrove, rende write-skew possibile - vedi, ad esempio, qui: http://en.wikipedia.org/wiki/Snapshot_isolation )
Mark Volkmann ha fatto una presentazione molto dettagliata su STM in generale (e STM di Clojure in particolare) a Strano Anello 2009, che è possibile trovare qui (articolo e diapositive qui ). Io non so davvero di qualsiasi altra risorsa (diverso dal codice) per capire il funzionamento del MCS Clojure.