Чем Clojure STM отличается от Haskell STM? - PullRequest
31 голосов
/ 30 декабря 2010

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

Ответы [ 3 ]

25 голосов
/ 30 декабря 2010

Clojure STM имеет 3 большие уникальные функции:

  1. Реализация моментального снимка MVCC, предотвращающего перезапуск транзакций при недействительности чтения.
  2. Гарантирует, что ссылки на чтение-запись обеспечивают своего рода ручное управление ресурсамизаказ на получение.
  3. Имеет явную коммутацию, которая сокращает повторные попытки при коммутативной записи.
16 голосов
/ 31 декабря 2010

Для Haskell STM см. Документы SPJ: http://research.microsoft.com/en-us/um/people/simonpj/papers/stm/

В частности, используются «Операции с составной памятью» и «Транзакционная память с инвариантами данных». Реализация STM в GHC действительно не является MVCC. Я не помню все детали реализации, но, насколько я понимаю, описание в статьях не сильно отличается от того, что в настоящее время существует в GHC.

(обратите внимание, что MVCC в ближайшем будущем или в другом месте делает возможным перекос при записи - см., Например, здесь: http://en.wikipedia.org/wiki/Snapshot_isolation)

12 голосов
/ 30 декабря 2010

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

...