STM.NET против Clojure STM

Мне интересно, как это возможно, что Clojure реализовала транзакционную память программного обеспечения и не видит в этом никаких проблем, в то время как Microsoft не закончила свою работу над C# и заметила некоторые проблемы, которые делают непрактичной реализацию STM, описанную здесь: http://www.bluebytesoftware.com/blog/2010/01/03/ABriefRetrospectiveOnTransactionalMemory.aspx

Любая идея, пожалуйста?


person user1121956    schedule 24.06.2013    source источник


Ответы (2)


Clojure начал использовать STM почти с самого начала языка, что повлияло на дизайн языка и на то, как язык используется, чтобы сделать их STM практичным. C# пришлось начинать как с существующего языка, так и с существующими способами его использования, что усложняло проблему. Наиболее важным отличием является то, что STM в Clojure начинается с неизменяемых данных в ядре языка, а затем строит концепцию идентичности поверх этого, а STM — поверх концепции идентичности. Также стоит отметить, что существует много разных типов STM, и STM clojure сильно отличается.

person Arthur Ulfeldt    schedule 24.06.2013

Существует много разных подходов к STM. Это очень широкая тема, как и «системы типов»: один подход может легко преуспеть, в то время как другие подходы терпят неудачу по разным причинам.

Clojure STM имеет несколько конструктивных решений, которые делают его ИМХО более практичным и эффективным, чем предыдущие подходы:

  • Он не пытается защитить произвольные данные с помощью STM — вы должны использовать специальные управляемые ссылки, такие как (ref и подобные). Это делает его гораздо более простым и целенаправленным дизайном, чем многие более ранние подходы STM (включая подход Microsoft, по крайней мере, как описано в статье, указанной выше).
  • Он использует параллельный контроль нескольких версий с неизменяемыми данными. Это делает обработку транзакций намного более эффективной и практичной. В частности, это означает, что нетранзакционные чтения не требуют блокировки, что является огромным выигрышем в производительности....
  • Это делается в контексте функционального языка — в частности, тот факт, что большая часть кода в Clojure по умолчанию не содержит побочных эффектов, значительно упрощает применение таких методов, как повторные попытки транзакций.

В результате этих дизайнерских решений Clojure STM сильно отличается от предыдущих подходов STM, и я думаю, что он преуспел благодаря своему новому дизайну. Видео ниже немного старое, но отличное, если вы хотите получить представление о том, как это работает:

http://www.infoq.com/presentations/Value-Identity-State-Rich-Hickey

person mikera    schedule 26.06.2013