Size: a a a

2021 April 10

MB

Mikail Bagishov in Rust Async
И итого там сразу 2 футгана получается:
1) если память под футуру освобождена до того как отработал деструктор (например если был сделан forget), будет UB.
2) если футура дропнута до того, как операция завершилась, то она в деструкторе будет синхронно ждать окончания этой операции
источник

RP

Roman Proskuryakov in Rust Async
ну второй вариант хотя бы сейфовый
источник

П

Пух in Rust Async
У меня вообще mem::forget и сейфти как-то вместе не уживаются) Но чисто формально оно безопаснее некуда:с
источник

в🧇

вафель 🧇 in Rust Async
Проблема в том, что невозможно такое запретить :)
источник

П

Пух in Rust Async
Угу, из-за этого убрали спавн потока с передачей ссылки на локальную переменную, грустно
источник

D

Denis in Rust Async
А? Scoped threads в rayon/crossbeam вполне сейфовые
источник

П

Пух in Rust Async
Там ещё реализация в стд была, вроде
источник

П

Пух in Rust Async
Ща гляну ещё как в rayon сделано, интересно стало
источник

D

Denis in Rust Async
Когда-то давно была, да, но её вынесли не потому, что форгет ей мешал))
источник

D

Denis in Rust Async
Через ансейф магию и клятвенные обещания, что все треды завершатся на момент выхода из скоупа, гарантируется это посредством использования замыканий
источник

П

Пух in Rust Async
В том числе потому что гард можно было успешно форгетнуть
источник

D

Denis in Rust Async
Гард -- да, потому там без гардов)
источник

П

Пух in Rust Async
Ну то есть примерно как в crossbeam
источник

D

Denis in Rust Async
Я про него и район и говорил =)
источник

П

Пух in Rust Async
Ну кроссбим я прост уже видел, мб тут что-то кардинально другое
источник

D

Denis in Rust Async
А, неправильно прочитал сначала, сорян
источник

D

Denis in Rust Async
Да вроде принципиально иначе и не сделаешь
источник
2021 April 11

DF

Dollar Føølish in Rust Async
Можно ввести маркер трейт Unforgettable
источник

DF

Dollar Føølish in Rust Async
Его импл даже сейф будет
источник

в🧇

вафель 🧇 in Rust Async
не поможет.
— не понятно как запретить делать Rc-циклы и подобное
— сломает дженерик код который опирается на забываемость (например использует ManuallyDrop)
— А Box::leak считается?..
источник