Я пытаюсь найти различия между тем, что Clojure называет STM, и тем, что реализовано в Haskell как STM. Если отвлечься от фактических языковых семантических различий, я немного сбит с толку, когда Рич Хики сказал в своей речи, что реализация STM в Clojure сильно отличается от всего остального, но я не понимаю различий, кроме выбора языка.
Чем Clojure STM отличается от Haskell STM?
Ответы (3)
Clojure STM имеет 3 большие уникальные особенности:
- Реализует моментальный снимок MVCC, избегая перезапуска транзакций при признании недействительности чтения.
- Обеспечивает ссылки на чтение-запись обеспечивает своего рода ручное управление порядком получения ресурсов.
- Имеет явную коммутацию, которая снижает количество повторных попыток коммутативной записи.
Информацию о Haskell STM см. В статьях SPJ: http://research.microsoft.com/en-us/um/people/simonpj/papers/stm/
В частности, используются «транзакции составной памяти» и «транзакционная память с инвариантами данных». Реализация STM в GHC действительно не является MVCC. Я не помню всех деталей реализации, но я понимаю, что описание в документах не сильно отличается от того, что в настоящее время существует в GHC.
(обратите внимание, что MVCC в clojure или где-либо еще делает возможным перекос записи - см., например, здесь: http://en.wikipedia.org/wiki/Snapshot_isolation)
orElse
для атомарного составления транзакций.
- person Don Stewart; 04.05.2011
STM
- это MonadPlus
, который позволяет вам указывать дополнительные условия сбоя в контексте транзакции. то есть, если окончательный баланс счета отрицательный, не удалось / повторить попытку txn. Это также позволяет вам легко делиться этой логикой с другими MonadPlus
классами; та же функция покажет результат всех потенциальных действительных транзакций для List
учетных записей и покупок. Это может быть полезно, если логика сложна. Я не думаю, что это возможно в Clojure.
- person Dax Fohl; 08.06.2013
Марк Фолькманн сделал очень подробную презентацию STM в целом (и STM Clojure в частности) на Strange Loop 2009, который вы можете найти здесь (статья и слайды здесь). Я действительно не знаю никаких других ресурсов (кроме кода) для понимания того, как работает Clojure STM.