Size: a a a

2021 May 25

c

codingteam@cjr in codingteam
Akon32
хм.
источник

c

codingteam@cjr in codingteam
Akon32
>Rust’s rich type system and ownership model guarantee memory-safety and thread-safety — enabling you to eliminate many classes of bugs at compile-time.
источник

c

codingteam@cjr in codingteam
Akon32
"many classes", не "all bugs".
источник

t

ttldtor in codingteam
А что там такого особого?
источник

t

ttldtor in codingteam
Я сразу начал с многопоточки. Код не собрался и я стал простые вещи пробовать
источник

c

codingteam@cjr in codingteam
portnov
погромист-многопоточник
источник

c

codingteam@cjr in codingteam
portnov
как многостаночник, только многопоточник
источник

c

codingteam@cjr in codingteam
portnov
а есть системы типов, которые позволяют доказывать чего-нить про многопоточность? Что дедлоков нет, например
источник

c

codingteam@cjr in codingteam
portnov
в принципе, на зависимых типах наверно можно выразить
источник

c

codingteam@cjr in codingteam
portnov
philosopher1 :: Locks [Fork1, Fork2]
источник

c

codingteam@cjr in codingteam
Minoru
@ttldtor: пока смотришь на примеры, всё очевидно, а как начинаешь писать код — сразу начинаются ошибки, мол, тут вот захватил переменную и пытаешься вернуть замыкание, тут вот мувнул переменную и снова пытаешься юзать, тут вот написал `&mut x.foo(x)`… В общем, много всякой мелочёвки вылезает, которая вызывает реакицю типа «да всё ок, я так в плюсах сто раз делал и ничего»
источник

c

codingteam@cjr in codingteam
Minoru
portnov: Rust доказывает, что ресурс используется только когда взяты все необходимые для этого локи: просто оборачиваешь ресурс в Lock<> — и всё, до внутренностей можно добраться только вызвав lock(). И .unlock() автоматически вызывается, потому что lock() на самом деле возвращает не сам ресурс, а обёртку вокруг него, которая в деструкторе вызывает unlock()
источник

c

codingteam@cjr in codingteam
Minoru
но это довольно узкий кейс. Наверняка есть ситуации, когда данные нельзя оборачивать в лок
источник

c

codingteam@cjr in codingteam
Minoru
или когда хочется глянуть на данные и уже потом решить, лочить их или нет
источник

c

codingteam@cjr in codingteam
portnov
т.е. lock :: Lock T -> T
источник

c

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

c

codingteam@cjr in codingteam
portnov
T Lock<T>::lock()
источник

c

codingteam@cjr in codingteam
Minoru
нет, Lock T -> LockGuard T
источник

c

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

c

codingteam@cjr in codingteam
portnov
а что можно сделать с LockGuard T?
источник