Я пытаюсь найти различия между тем, что Clojure вызывает STM и что реализовано в Haskell как STM. Принимая во внимание собственно языковые семантические различия, я немного смущен, так как в своем выступлении Рик Хики говорит, что реализация STM отличается от всего остального, но я не понимаю различий, кроме выбора языка. Clojure/p >
Как Clojure STM отличается от Haskell STM?
Ответ 1
Clojure STM имеет 3 большие уникальные функции:
- Реализовывает моментальный снимок MVCC, избегая транзакций, перезагружается при чтении недействительности.
- Обеспечивает ссылки на чтение-запись обеспечивает ручное управление порядком получения ресурсов.
- Имеет явный коммутирующий элемент, который уменьшает повторы на коммутативной записи.
Ответ 2
Для Haskell STM см. документы SPJ: http://research.microsoft.com/en-us/um/people/simonpj/papers/stm/
Особое использование - "Сопоставимые транзакции памяти" и "Транзакционная память с инвариантами данных". Внедрение GHC STM действительно не MVCC. Я не помню всех деталей реализации, но я понимаю, что описание в документах не так сильно отличается от того, что в настоящее время существует в GHC.
(обратите внимание, что MVCC в clojure или в другом месте делает возможным перекосы записи - см., например, здесь: http://en.wikipedia.org/wiki/Snapshot_isolation)