Чем Clojure STM отличается от Haskell STM?

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


person yazz.com    schedule 30.12.2010    source источник


Ответы (3)


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

  1. Реализует моментальный снимок MVCC, избегая перезапуска транзакций при признании недействительности чтения.
  2. Обеспечивает ссылки на чтение-запись обеспечивает своего рода ручное управление порядком получения ресурсов.
  3. Имеет явную коммутацию, которая снижает количество повторных попыток коммутативной записи.
person william gouvea    schedule 30.12.2010
comment
не могли бы вы также добавить в этот список нулевые накладные расходы на нетранзакционное чтение? - person mikera; 02.01.2011
comment
Это правда, когда вы используете нетранзакционный контекст, но если вы рассматриваете STM и повторные попытки для других транзакций, я не уверен, страдает ли система дыр от производительности из-за подкачки контекста. Но JVM очень зрелая, а STM похож на GC ... очень необходимо, так что вы должны так думать - person william gouvea; 13.01.2011
comment
Привет, Уильям. Читая статью и презентацию Марка Фолькмана, он сказал, что чтение запускает повторную попытку в Clojure только тогда, когда список истории Refdoes не содержит значения, зафиксированного до начала txn. Первая функция, описанная выше, верна? - person CHAPa; 23.03.2011
comment
@CHAPa правильно, сокращение - лучшее слово, чем избегание. Но, как правило, только в особых случаях (медленное чтение с быстрой и частой записью) это вообще пригодится. - person Dax Fohl; 08.06.2013
comment
STM Clojure страдает одной конкретной проблемой, которая хорошо известна и не решена, когда длительные транзакции могут никогда не завершиться, если они будут вытеснены более короткими транзакциями. Я не уверен, есть ли у Haskell аналогичная проблема. - person johnbakers; 22.07.2016

Информацию о 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)

person sclv    schedule 31.12.2010
comment
Также следует отметить, что реализация GHC обеспечивает во время компиляции гарантии безопасности транзакции в отношении побочных эффектов; и уникальный комбинатор orElse для атомарного составления транзакций. - person Don Stewart; 04.05.2011
comment
@DonStewart Кроме того, Haskell STM - это MonadPlus, который позволяет вам указывать дополнительные условия сбоя в контексте транзакции. то есть, если окончательный баланс счета отрицательный, не удалось / повторить попытку txn. Это также позволяет вам легко делиться этой логикой с другими MonadPlus классами; та же функция покажет результат всех потенциальных действительных транзакций для List учетных записей и покупок. Это может быть полезно, если логика сложна. Я не думаю, что это возможно в Clojure. - person Dax Fohl; 08.06.2013

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

person Alex Miller    schedule 30.12.2010
comment
Ссылка на презентацию не работает. У кого-нибудь есть альтернатива этому разговору? - person Neil; 13.09.2015
comment
Слайды презентации и подробная статья по теме доступны здесь java.ociweb.com/mark /stm/article.html - person lorefnon; 21.10.2015
comment
Такое хорошее чтение. Очень доступно. Г-н Фолькманн - одаренный писатель. - person Alex; 20.12.2015
comment
Есть ли где-нибудь запись выступления мистера Фолькмана? - person Louis Thibault; 02.01.2020