Size: a a a

2021 June 21

F

Fortunato in Rust Async
А кто-нибудь знает, как tokio::spawn() внутри ловит паники?
источник

MB

Mikail Bagishov in Rust Async
По-моему poll футуры делается внутри catch_unwind.
источник

DF

Dollar Føølish in Rust Async
да
источник

F

Fortunato in Rust Async
Т.е. сама футура и всё внутри неё должно быть UnwindSafe?
источник

MB

Mikail Bagishov in Rust Async
источник

F

Fortunato in Rust Async
Ага, всё-таки он.
Я ведь правильно понимаю, что AssertUnwindSafe - это небольшой хак, чтобы сказать компилятору: "да не парься, тут всё UnwindSafe, я отвечаю"?
А на самом деле внутри могут быть ни разу не unwind safe вещи?
источник

MB

Mikail Bagishov in Rust Async
Ну да
источник

F

Fortunato in Rust Async
Но почему тогда это считается безопасным? Вот так в tokio::spawn() передаёшь что-нибудь, заранее !UnwindSafe, а оно считается безопасным, хотя таковым не является
источник

MB

Mikail Bagishov in Rust Async
UnwindSafe это не unsafe trait, поэтому UB случиться не может
источник

F

Fortunato in Rust Async
Ну т.е. если футура паникнёт, !UnwindSafe данные ведь останутся в непонятно каком состоянии
источник

F

Fortunato in Rust Async
Почему это считается нормальным? А если нет, то почему есть этот обход с AssertUnwindSafe?
источник

MB

Mikail Bagishov in Rust Async
Ну, я детально не могу сказать, но я слышал мнение, что UnwindSafe вообще не нужен. Ну и в рамках этого мнения вполне логично везде тыкать AssertUnwindSafe.
источник

F

Fortunato in Rust Async
Ага, тоже такое читал только что. Выглядит как-то странно: "вот механизм для безопасного перехватывания паник, а вот механизм для его отключения"
источник

F

Fortunato in Rust Async
Энивей, спасибо за помосч
источник

DF

Dollar Føølish in Rust Async
очень интересная тема
источник

DF

Dollar Føølish in Rust Async
в теории уничтожение произвольных обьектов при анвинде вподне может триггернуть убец
источник

DF

Dollar Føølish in Rust Async
а учитывая то что паника таки ловится а не завершает приложение, похоже токио тут ссзб
источник

П

Пух in Rust Async
Catch unwind вроде ансейф же?
источник

DF

Dollar Føølish in Rust Async
поч?
источник

DF

Dollar Føølish in Rust Async
ну дестркктор при панике и инварианты языка может нарушить, если плохо написан
источник