𝙽𝚒𝚌𝚔
random я вкорячил, чтобы компилер точно не догадался по какой ветке пойдёт
Vladimir
А, ты замиксовал
𝙽𝚒𝚌𝚔
ага
Vladimir
видимо без impl Drop раст умеет трекать отдельно поля, вот что mir животворящий делает
Vladimir
но поидее эт баг
Vladimir
по крайней мере выглядит очень неочевидно
Vlad
Мой батя ебашит вообще адовые компиляторы
𝙽𝚒𝚌𝚔
Да, выглядит как в соответвии с замыслом, но замысел в соответствии с чем?
Vladimir
Да, выглядит как в соответвии с замыслом, но замысел в соответствии с чем?
мне кажется когда портировали дропфлаги на бороучекер, переусердствовали
Vladimir
хотелось просто переменные чтоб можно было переинициализировать, а получили что и поля можно
Cat
> переинициализировать эмм.. зачем?
Vlad
Компилится struct Foo { a: i32 } fn main() { let mut foo: Foo; foo.a = 3; }
Vladimir
> переинициализировать эмм.. зачем?
let mut x = ...; if cond { drop(x) } x = ...;
Cat
let mut x = ...; if cond { drop(x) } x = ...;
не, это не отвечает на вопрос "зачем"
Cat
ну и по мне это говнокод
Vladimir
ок let mut x = ...; if cond { drop(x) } if cond { x = ...; } println!("{}",x);
Vladimir
так понятно?
Cat
так понятно?
это опять же не отвечает на вопрос "зачем"
Cat
только если ответ "просто потому что"
Vladimir
почему не отвечает?
Vladimir
ты хочешь по какой-то бизнес задаче печатать данные
Vladimir
по определенному условию их заменять на другие
Vlad
Компилится struct Foo { a: i32 } fn main() { let mut foo: Foo; foo.a = 3; }
drop (move) просто делает биндинг неинициализированным, как будто там вот так написано. Остается вопрос, почему оно компилится. Ну всм ок, что это вроде безопасно, но нахера, казалось бы, ведь прочитать оттуда значение мы все равно не сможем. Мб clippy на этом ошибки выдает
Cat
почему не отвечает?
let mut connection = ... if cond { drop(connection) } connection.smth()
𝙽𝚒𝚌𝚔
затем, чтобы переиспользовать память, которая точно не будет использоваться более. Чтобы уделывать сишечку
Cat
?
ничего подозрительного?
Vladimir
ничего подозрительного?
эт работать не будет
Vladimir
а так ничего
Vladimir
дроп флаги
Vladimir
не во всех ветках существует connection
Cat
так а почему твой вариант должен?)
Vladimir
потому что во всех ветках существует connection
Vladimir
x)))
Vladimir
я ж с значением х не работаю
Cat
ты прав, действительно (читай: я слился, впадлу спорить)
Vladimir
ну окей
Vladimir
можешь потом потестить
Cat
так-то в языке есть shadowing специально для подобных вещей
Cat
можешь потом потестить
в смысле, "потестить"?
Cat
я говорю, что это ненужная "фича"
Vladimir
shadowing и дроп флаги это решение совсем разных проблем.
Vladimir
Еслиб не было mut переменных в расте, то все бы решали одним шедовингом
Vladimir
но в расте есть mut
Cat
и?
Денис
Последний movl
сравни с ассемблером тут — http://play.rust-lang.org/?gist=fe0c4e98f5817257b4ed3902c8871faa&version=stable&mode=debug&edition=2015
Денис
это не то
Vladimir
movl $1, 4(%rsp) в коде @vlad20012
Денис
посмотрите мой пример
Vlad
сравни с ассемблером тут — http://play.rust-lang.org/?gist=fe0c4e98f5817257b4ed3902c8871faa&version=stable&mode=debug&edition=2015
Тут нет этого movl. Поиграйся с числами. Вместо единицы подставь что-нибудь уникальное. Увидишь
Vladimir
в твоем нету, наверняка
Денис
бля
Денис
чё-то он походу не обновил ассемблер, сорян :(
Денис
забудьте всё что я говорил)
Денис
клиппи кстати молчит
Vladimir
а че ему говорить
Денис
я к этому — https://t.me/rustlang_ru/146389
Vladimir
мне кажется дропфлаги в целом такой редкий кейс, а такой и подавно
Cat
/jerk > редкий кейс >> никто не встречался >>> не баг, а фича >>>> фиксить нечего
Cuno
Удваиваю, скорее на баг похоже.
Vlad
Поясняю за кейс - я тут объяснял чуваку, какой крутой Раст, что тут мув по дефолту, а после мува нельзя переменную использовать, сейчас покажу! На этом объяснения закончились
Vladimir
х)))))))
Vladimir
мне кстати кажется, что после асигна может быть даже принт будет работать на структуре
Cat
mexus говорит, что с принтом не компилится t.me/rustlang_ru/146325
Vladimir
mexus говорит, что с принтом не компилится t.me/rustlang_ru/146325
ну я про кейс после асигна. Но да, не работает
Vladimir
тогда темпаче баг
Vladimir
http://play.rust-lang.org/?gist=fe0c4e98f5817257b4ed3902c8871faa&version=stable&mode=debug&edition=2015
Cuno
https://stackoverflow.com/a/46836391
Cat
> you don't really need this functionality