Size: a a a

Rust — русскоговорящее сообществo

2020 August 17

t

this is not mrklf in Rust — русскоговорящее сообществo
Mikail Bagishov
&T -> &mut &T
а. всего один &T в конечном итоге выходит, интересно.
источник

AV

Andrey Vlasov in Rust — русскоговорящее сообществo
Vladimir
ну тут точно в бегинерс. Если код работает с одним thread::spawn о будет работать с сколько угодно тредами
Мне кажется, ты просто в своём коде клон не добавил, поэтому тупое добавление ещё одного потока всё ломает
источник

AV

Andrey Vlasov in Rust — русскоговорящее сообществo
Vladimir
@HifiMe если без мьютекса, то просто
let fs = Arc::new(File::open(..));

thread::spawn(move ||{
fs.write(..);
fs.read(..);
});
Должно работать
Вот здесь. По ссылке код не смотрел, мб там есть клон
источник

V

Vladimir in Rust — русскоговорящее сообществo
Andrey Vlasov
Мне кажется, ты просто в своём коде клон не добавил, поэтому тупое добавление ещё одного потока всё ломает
ну тут нужно читать бук чтоб понимать зачем нужен clone/sync/send. В любом случае нет смысла это здесь пересказывать
источник

AV

Andrey Vlasov in Rust — русскоговорящее сообществo
Vladimir
ну тут нужно читать бук чтоб понимать зачем нужен clone/sync/send. В любом случае нет смысла это здесь пересказывать
Соглы, соглы
источник

V

Vladimir in Rust — русскоговорящее сообществo
@HifiMe на всякий https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&gist=bdb6780801cbea056c30e8a8c5b36b57 вот полный код с потоками без мьютексов и дерефом
источник

R

Roman in Rust — русскоговорящее сообществo
Получается File внутри лочит доступ к файлу?
источник

Ct

Casual tears in Rust — русскоговорящее сообществo
Roman
Получается File внутри лочит доступ к файлу?
Не, просто write syscall работает атомарно.
источник

Ct

Casual tears in Rust — русскоговорящее сообществo
The adjustment of the file offset and the write operation are performed as an atomic step. (c) man write(2)
источник

MB

Mikail Bagishov in Rust — русскоговорящее сообществo
Наверное, какой-то мьютекс все-таки есть, но он берется в коде ядра и нам недоступен.
источник

Ct

Casual tears in Rust — русскоговорящее сообществo
Кто-нибудь знает почему в https://doc.rust-lang.org/std/sync/struct.RwLockReadGuard.html нету метода map, как в parking_lot https://docs.rs/lock_api/0.4.0/lock_api/struct.RwLockReadGuard.html#method.map ?
источник

R

Roman in Rust — русскоговорящее сообществo
по недосмотру, наверное
источник

R

Roman in Rust — русскоговорящее сообществo
Но ты можешь добавить с помощью extension trait-а
источник

SS

Sergey Shmakov in Rust — русскоговорящее сообществo
было у кого вот такое ? error: linking with link.exe failed: exit code: 1120
источник

f

folex in Rust — русскоговорящее сообществo
А можно ли как-то среди std::io::Error отличить Os { code: 17, kind: AlreadyExists, message: "File exists" }")}?

Понятно что можно сделать match err { Error::Os(17) => {} }, но это же как-то не очень-то кроссплатформенно, наверное? И вообще попахивает. А sys::decode_error_kind кажется не доступен простому смертному
источник

S

Sese in Rust — русскоговорящее сообществo
источник

t

this is not mrklf in Rust — русскоговорящее сообществo
folex
А можно ли как-то среди std::io::Error отличить Os { code: 17, kind: AlreadyExists, message: "File exists" }")}?

Понятно что можно сделать match err { Error::Os(17) => {} }, но это же как-то не очень-то кроссплатформенно, наверное? И вообще попахивает. А sys::decode_error_kind кажется не доступен простому смертному
В найтли можно kind вроде получить
источник

MB

Mikail Bagishov in Rust — русскоговорящее сообществo
folex
А можно ли как-то среди std::io::Error отличить Os { code: 17, kind: AlreadyExists, message: "File exists" }")}?

Понятно что можно сделать match err { Error::Os(17) => {} }, но это же как-то не очень-то кроссплатформенно, наверное? И вообще попахивает. А sys::decode_error_kind кажется не доступен простому смертному
источник

f

folex in Rust — русскоговорящее сообществo
Как раз тоже его нашел в доке. Привычка читать сорцы перед докой снова подвела :) Спасибо!
источник

Э

Эрик in Rust — русскоговорящее сообществo
Есть ещё методы std::io::Error::last_os_error() и ::raw_os_error().
источник