Чем Clojure STM отличается от Haskell STM?
Я пытаюсь найти различия между тем, что Clojure называет STM, и тем, что реализовано в Haskell как STM. Отбросив фактические языковые семантические различия, я немного запутался, поскольку Рич Хики говорит в своей речи, что реализация STM в Clojure сильно отличается от всего остального, но я не понимаю различий, кроме выбора языка.
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)