подряд в одной функции блокировался мьютекс.
Раст, например, мог бы запрещать локать во второй раз на этапе компиляции, если бы объекты в расте могли бы приобретать эффекты.
Например, после lock() переменная мьютекса неявно приобретает эффект 'already_locked<'lifetime_of_returned_ref>, который запрещает вызов метода lock(), пока полученная ссылка не завершит время жизни.
Такой функционал мог бы сделать раст более мощным, но вопрос в том, а надо ли? Компиляция и так не быстрая. Хотя надеюсь, что трейты для функций привнесут что-то новое. (Я пока не читал это RFC)
как раз дважды лок в одной функции вполне может отслеживаться линтерами, проблема же когда они раскиданы ровным слоем по всей программе
линтером, но не системой типов
да, но это всё еще нельзя в общем виде гарантировать каким-то образом
Тип переменной не может меняться, он всегда один
Ну, здесь я не про дедлоки, а про концепцию в целом. Например можно сделать билдеры, которые смогут вернуть значение T, после того, как необходимые методы вызваны.
Обсуждают сегодня