Size: a a a

Scala User Group

2020 February 01

Oℕ

Oleg ℕizhnik in Scala User Group
А зио есть РефМ, в тофу, думаю, я уже своими руками сделаю Agent
источник

SA

Sergey Alaev in Scala User Group
Kirill Shelopugin
Я перестал понимать о чем ты, Сергей, пишешь
Вот общая формулировка: есть мутабельный стейт, есть effectful функция его модификации А => F[A]. Нужно гарантировать синхронизацию.
Мой поинт в том, что MVar для этого подходит плохо.
источник

Oℕ

Oleg ℕizhnik in Scala User Group
И в принципе, это заберёт почти все юзкейзы использования мвара для синхронизации мутабельной переменной
источник

Oℕ

Oleg ℕizhnik in Scala User Group
Sergey Alaev
Вот общая формулировка: есть мутабельный стейт, есть effectful функция его модификации А => F[A]. Нужно гарантировать синхронизацию.
Мой поинт в том, что MVar для этого подходит плохо.
Да, все согласны с этим
источник

KS

Kirill Shelopugin in Scala User Group
Sergey Alaev
Вот общая формулировка: есть мутабельный стейт, есть effectful функция его модификации А => F[A]. Нужно гарантировать синхронизацию.
Мой поинт в том, что MVar для этого подходит плохо.
Да, тут ты прав. С этого и можно было начать, кажется 😄
источник

Oℕ

Oleg ℕizhnik in Scala User Group
Есть просто ещё кейсы, опасные, но они выражаются только через СТМ и МВары/очереди
источник

Oℕ

Oleg ℕizhnik in Scala User Group
Например синхронизация нескольких состояний
источник

SA

Sergey Alaev in Scala User Group
Oleg ℕizhnik
Например синхронизация нескольких состояний
такие вещи неплохо пишутся на старых добрых var и synchronized {} вместе с Deferred
источник

Oℕ

Oleg ℕizhnik in Scala User Group
Sergey Alaev
такие вещи неплохо пишутся на старых добрых var и synchronized {} вместе с Deferred
Будет ещё хуже, чем мвар
источник

Oℕ

Oleg ℕizhnik in Scala User Group
Лучше всего стм
источник

SA

Sergey Alaev in Scala User Group
*сложнее всего стм
источник

Oℕ

Oleg ℕizhnik in Scala User Group
Нет, стм проще всего
источник

Oℕ

Oleg ℕizhnik in Scala User Group
И лучше по гарантиям
источник

SA

Sergey Alaev in Scala User Group
если у нас есть n мутабельных переменных в стейте, то после переложения на стм можно получить очень большое, неподъемное кол-во состояний
источник

Oℕ

Oleg ℕizhnik in Scala User Group
Они получатся при любом переложении, оставляющим эти переменные независимыми
источник

Oℕ

Oleg ℕizhnik in Scala User Group
Просто в случае мваров большая часть траекторий будет вести к дедлоку, а в случае волатайлов чтобы избежать uncommitted read, их все скроют в суперприватных переменных  и обложат методами с гигантскими контрактами в доках, как и в каком порядке эти методы можно вызывать
источник

SA

Sergey Alaev in Scala User Group
почему волатайл? synchronized
источник

Oℕ

Oleg ℕizhnik in Scala User Group
Ну это те же мвары, просто лочат треды
источник

Oℕ

Oleg ℕizhnik in Scala User Group
Т.е. ты получаешь и блокировку и дедлоки в одном флаконе
источник

SA

Sergey Alaev in Scala User Group
нет, т.к. это короткоживущий лок, защищающий консистентность стейта. "длинные" локи, завязанные на io, делаются через Deferred
источник