Vladimir
он поидее может понять и добавить лишний дроп
Vladimir
без флагов
Alexander
так перешёл по ссылкам
Alexander
сейчас прочитю может останутся вопросы - спрошу
Alexander
ааа там конкретной реализации нету...
ozkriff🇺🇦
без флагов
ну там компилятор когда может (часто) статически определеяет и никакого флага не нужно, но если у тебя код с ветвлениями - статически никак не узнаешь
Alexander
почему спрашиваю, мне интересно можно ли это переиспользовать у себя в каком-то виде
Vladimir
можно пример такого ветвления когда статически нельзя добавить лишний дроп?
Alexander
т.е.: fn foo(Result<Baz,Quu> y) Box<Bar> -> () let x = Box::new(Bar); let z = y.unwrap(); return x
Alexander
вот например такой код
Alexander
извините, что не скомпиляется, но суть я думаю ясна
Alexander
в случае если нам передали Err<Baz> агрументом, то все развалится, но память должна освободиться
Alexander
а если не передали, то Box должен вернуться выше и все хорошо
Alexander
@c_vld ^
Alexander
вот как это внутри работает
Alexander
на стек складывается инфа о выделенных ресурсах, при unchecked исключении сворачиваем стек все освобождая, иначе тупо выходим?
Vladimir
https://doc.rust-lang.org/beta/nomicon/unwinding.html
Vladimir
вот тут почитай
Alexander
ниговорят как сделано, или я плохо читаю
Vladimir
ну хз там еще подкатегории есть
Vladimir
суть в том, что есть два вида обработка паники в расте
ozkriff🇺🇦
можно пример такого ветвления когда статически нельзя добавить лишний дроп?
там же по второй ссылке, вроде, такой: https://play.rust-lang.org/?gist=48e4cf4b421dc9f86afdd7345a90e776 если условие не выполняется, то в конце main drop вызывать нелья будет - у нас переменная просто не инициализирована
Vladimir
суть в том, что есть два вида обработка паники в расте
abort - просто завершение, тогда всей очисткой занимается ос. не стоит ожидать что какое-то состояние будет финализировано unwind - размотка стека.
ozkriff🇺🇦
https://www.reddit.com/r/rust/comments/4zj7v0/drop_flags_are_gone_o/ - в прошлогодней новости есть пара интересных коментов с подробностями, кстати
Vladimir
@ozkriff я просто смотрю на такой код pub fn some(a: bool,b: bool) { let mut v; if a { v = test::black_box(NewStruct); } }
Vladimir
он полностью аналог с плейпена, правильно?
Vladimir
но при этом я не нахожу тут анализа переменной со стека example::some: test dil, dil je .LBB1_2 push rbp mov rbp, rsp sub rsp, 16 lea rax, [rbp - 8] call <example::NewStruct as core::ops::drop::Drop>::drop@PLT add rsp, 16 pop rbp .LBB1_2: ret
Vladimir
даже в более сложном pub fn some(a: bool,b: bool) { let mut v; if a { v = test::black_box(NewStruct); } if b { v = test::black_box(NewStruct); } }
Sherzod
Андрюха, давно тут?
Vladimir
example::some: push rbp mov rbp, rsp push rbx push rax test dil, dil je .LBB2_1 lea rax, [rbp - 16] mov al, 1 test sil, sil jne .LBB2_5 jmp .LBB2_8 .LBB2_1: xor eax, eax test sil, sil je .LBB2_8 .LBB2_5: lea rcx, [rbp - 16] test al, al je .LBB2_7 call <example::NewStruct as core::ops::drop::Drop>::drop@PLT jmp .LBB2_7 .LBB2_8: test al, al je .LBB2_9 .LBB2_7: call <example::NewStruct as core::ops::drop::Drop>::drop@PLT .LBB2_9: add rsp, 8 pop rbx pop rbp ret mov rbx, rax call core::ptr::drop_in_place mov rdi, rbx call _Unwind_Resume@PLT str.0:
Alexander
@c_vld ясно, вот мне случай с unroll интересен
ozkriff🇺🇦
хм, интересно. в моей картине мира тут флаги быть должны) может компилятор анализирует контекст хитрее и понимает что они таки не нужны? надо будет покопать
ozkriff🇺🇦
с утра вот. я даже тебе отвечал про гифку с go :(
Sherzod
Sherzod
с утра вот. я даже тебе отвечал про гифку с go :(
На работе завал, и инет плохо работает :)
Vladimir
@qnikst если честно, технически как унролл я тебе не скажу, могу лишь сказать, что поочередно дропаются все переменные со стека, дергая их деструкторы, и так по всей цепочке вызовов
Vladimir
до перехвата унвинда
Alexander
а не знаешь на стеке специальный frame с указателями на методы? или что
Alexander
ну хотя не так и важно
Alexander
хм.. хотя интересно что происходит когда такая переменная совобождается обычным образом, инфа со стека снимается?
Сережа
я не уверен как это в расте, но скорее всего компилятор должен генерировать вызов Drop неявно когда видит выход из блока, которому принадлежит объект
Сережа
что значит обычным способом переменная освобождается?
Сережа
что значит инфа снимается со стека?
Filipp
указатель стека декрементится на размер фрейма?
Filipp
https://careers.mozilla.org/position/gh/906143 а че сюда никто не апплаился?
Cuno
@qnikst В расте llvm exceptions используются для паники: https://github.com/rust-lang/rust/blob/master/src/libpanic_unwind/gcc.rs
John
https://careers.mozilla.org/position/gh/906143 а че сюда никто не апплаился?
Сейчас бы зонды помогать разрабатывать
Cuno
Да, действительно. Коммент в начале файла ввел в заблуждение.
VCL
VCL
Приветствую․ Какой package рекомендуете устанавливать для VSCode?
Маjко
2
VCL
2
Thx
Loo
iNTELLIJ IDEA
Loo
VCL
iNTELLIJ IDEA
Есть․ Даже с opensource лицензией хД. Но решил попробовать что-то новое.
պլհկ
2
Плохой совет!
Marat
EMACS
Xi editor
VCL
Плохой совет!
В том extension-е есть возможность выбрать RLS.
պլհկ
А rust rls официальный от команды rls
Маjко
Это единственный развивающийся плагин для раста
Маjко
И он поддерживает как rls так и racer + cargo check
Сережа
В идее есть отладка пошаговая?
Маjко
И он поддерживает как rls так и racer + cargo check
Это удобно, тк rls не всегда нормально работает
VCL
iNTELLIJ IDEA
И самописные замены rustfmt, racer и т․д., не думаю, что хорошая идея.
VCL
А там в плагине всё с нуля
VCL
Насколько знаю
Vlad
Че кто звал?
Bugworm
Вим
Denis
В идее есть отладка пошаговая?
Есть, но не для раста. Есть cLion (отдельная IDE на базе идейки) но я тоже не уверен что она умеет дебажить раст
Loo
Че кто звал?
говорят что ваш самописный зоопарк хуйня
Сережа
Умеет
պլհկ
Это единственный развивающийся плагин для раста
Hello everyone. I'm a maintainer and I'm very busy. At some point rls-vscode will supersede the extension. Until that moment someone should maintain the extension. If you are interested in it, please send me an email to kalita.alexey@outlook.com
պլհկ
Да, бро, ты был прав, сорян
Loo
outlook 0_0