Size: a a a

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

2020 August 19

В

Вафель in Rust — русскоговорящее сообществo
Andrey Vlasov
О, можно же прочейниться по опшнам
тогда если не все, то ты их дропнешь
источник

AV

Andrey Vlasov in Rust — русскоговорящее сообществo
Andrey Vlasov
О, можно же прочейниться по опшнам
С помощью and_then
источник

В

Вафель in Rust — русскоговорящее сообществo
а надо вернуть на место
источник

AV

Andrey Vlasov in Rust — русскоговорящее сообществo
Ааа блин
источник

m

mAX in Rust — русскоговорящее сообществo
@WaffleLapkin спасибо! интересное решение
источник

Э

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

m

mAX in Rust — русскоговорящее сообществo
@iccsf понравилось! спасибо!) буду разбираться.. раст все время чем-то удивляет)
посмотрел как take_mut сделано, а там unsafe внутри.. немного напрягает, но это уже религиозное))
источник

Э

Эрик in Rust — русскоговорящее сообществo
Ну ты бы ещё напрягся, что std::mem::take с ансейфом написано.
источник

В

Вафель in Rust — русскоговорящее сообществo
mAX
@iccsf понравилось! спасибо!) буду разбираться.. раст все время чем-то удивляет)
посмотрел как take_mut сделано, а там unsafe внутри.. немного напрягает, но это уже религиозное))
Ты в std посмотри там сплошной ехал unsafe через unsafe видит unsafe unsafe unsafe
источник

m

mAX in Rust — русскоговорящее сообществo
Эрик
Ну ты бы ещё напрягся, что std::mem::take с ансейфом написано.
я был счастлив в своем неведении.. зачем вы мне про это рассказали??))
источник

Э

Эрик in Rust — русскоговорящее сообществo
Герои сейф раста должны знать, кому они обязаны своим #![forbid(unsafe_code)]
источник

В

Вафель in Rust — русскоговорящее сообществo
Эрик
Ну ты бы ещё напрягся, что std::mem::take с ансейфом написано.
Чисто технически take это просто replace(dest, T::default()), чтобы дойти до ансейва придётся долезть до mem::swap
источник

Э

Эрик in Rust — русскоговорящее сообществo
Да я знаю.
источник

M

Marat in Rust — русскоговорящее сообществo
Вафель
Ты в std посмотри там сплошной ехал unsafe через unsafe видит unsafe unsafe unsafe
"это другое"
источник

V

Vladimir in Rust — русскоговорящее сообществo
@mAX3773 самое промышленное решение, это в одном Ифе проверить что все опшини будут is_some, а в теле сделать take+unwrap.
источник

В

Вафель in Rust — русскоговорящее сообществo
Marat
"это другое"
источник

R

Roman in Rust — русскоговорящее сообществo
use std::{mem::forget, ptr::read};
let fields = match &mut s {
 S { a: Some(a), b: Some(b), c: Some(c) } => unsafe {
   let fields = Some((read(a), read(b), read(c)));
   forget(s);
   Some(fields)
 },
 _ => None,
};
источник

EG

Emmanuel Goldstein in Rust — русскоговорящее сообществo
Отсутствие вызова Drop не UB.
источник

R

Roman in Rust — русскоговорящее сообществo
Но так все-равно опасненько
источник

В

Вафель in Rust — русскоговорящее сообществo
@iccsf не может дроп имплементировать (к сожалению), ты по полям матчишься
источник