Подтвердить что ты не робот

Как Clojure STM отличается от Haskell STM?

Я пытаюсь найти различия между тем, что Clojure вызывает STM и что реализовано в Haskell как STM. Принимая во внимание собственно языковые семантические различия, я немного смущен, так как в своем выступлении Рик Хики говорит, что реализация STM отличается от всего остального, но я не понимаю различий, кроме выбора языка. Clojure/p >

4b9b3361

Ответ 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)

Ответ 3

Марк Фолькманн сделал очень подробное изложение о STM в целом (и Clojure STM в частности) на Strange Loop 2009, который вы можете найти здесь (статья и слайды здесь). Я действительно не знаю ни одного другого ресурса (кроме кода) для понимания того, как работает Clojure STM.