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