Size: a a a

2021 May 25

c

codingteam@cjr in codingteam
O01eg
Тут, возможно, через линейные типы можно
источник

c

codingteam@cjr in codingteam
Minoru
а разве линейные типы это не borrow checking?
источник

c

codingteam@cjr in codingteam
portnov
Minoru: "на уровне языка" я имел ввиду чтобы в типе было видно, что у тебя залочено, что нет, и доступные методы были ограничены так, что неположенное залочить нельзя
источник

c

codingteam@cjr in codingteam
O01eg
Но вообще мутексы могут быть не только статическими, но и динамическими
источник

c

codingteam@cjr in codingteam
O01eg
Minoru: нет
источник

c

codingteam@cjr in codingteam
Akon32
portnov: сложно это. мьютексы могут блокироваться в разных функциях.
источник

c

codingteam@cjr in codingteam
O01eg
Akon32: обязать функции принимать нужны аргументы
источник

c

codingteam@cjr in codingteam
portnov
пока у меня в голове получается, что надо что-то очень похожее на эффекты
источник

c

codingteam@cjr in codingteam
O01eg
типа есть контекст с заблоченными мютексами
источник

c

codingteam@cjr in codingteam
Akon32
в итоге всё сойдётся к 1 потоку. или к 1й функции.
источник

c

codingteam@cjr in codingteam
portnov

lock :: mutex -> LockingT (mutex : mutexes) IO ()
источник

c

codingteam@cjr in codingteam
O01eg
у контекста есть метод lock куда передаётся следующий мутекс на блокировку и который проверяет, что в уже заблоченных есть только этот же рекурсивный мутекс, или подходящий по приоритету
источник

c

codingteam@cjr in codingteam
Minoru
portnov: звучит как ReaderT pattern, позволяющий функции видеть только те локи, которые она может лочить. Уже залоченные штуки функция должна получать через аргументы (чтобы избежать попытки залочить повторно)
источник

c

codingteam@cjr in codingteam
portnov
ну можно и так трактовать
источник

c

codingteam@cjr in codingteam
Minoru
а в STM дедлоки возможны?
источник

c

codingteam@cjr in codingteam
portnov
withLock :: mutex a -> (a -> LockingT (mutex a : mutexes) IO b) -> LockingT mutexes IO b
источник

c

codingteam@cjr in codingteam
portnov
во
источник

c

codingteam@cjr in codingteam
portnov
Minoru: кажется да
источник

c

codingteam@cjr in codingteam
portnov
Minoru: хотя я подозреваю что там есть какой-нибудь детектор. Редко использовал STM на всю катушку, но даже с обычными MVar неоднократно натыкался на то, что рантайм весьма эффективно детектит дедлоки (и роняет софтину вместо зависания)
источник

c

codingteam@cjr in codingteam
Minoru
а как withLock решает проблему взятия локов в неправильном порядке?
источник