Vladimir
Она точно так же реализована в стд
Vladimir
Есть ещё метод .drop у тиража Drop
Anonymous
это он и есть
Vladimir
Это деструктор, и его явно не вызвать
Vladimir
Нет
adam
Девушка, и крипто? Офигеть
она в торе один из тимлидов torproject.org/about/corepeople.html.en#isis
Anonymous
о втф
Vladimir
https://doc.rust-lang.org/std/mem/fn.drop.html
Vladimir
Вот функция дроп
Anonymous
а понял
でゲソ
где ты увидел шебанг
Ладно, местом не вышли.
Ilya
Ну, по факту, при вызове этой функции деструктор drop все же вызывается
Alexander
@c_vld я сейчас не про то, как правильно код написать, а про то, что при выполнении кода будет
Alexander
на низком уровне
Ilya
так что утверждение что его не вызвать самому не совсем верно
Alexander
т.е. грубо говоря про детали реализации
Vladimir
Есть кейс по сложнее типа l let mut x; If .. {x=...;} If .. {x = ...;}
Alexander
про то, как написать хороший код, я потом спрошу :)
Vladimir
Раньше это решалось дроп флагами, сейчас анализом кода в мир
Alexander
т.е. мой вопрос такой, что делает rust для того, чтобы drop 2 раза не вызвался
Vladimir
так что утверждение что его не вызвать самому не совсем верно
Сам деструктор ты не ввзовешь, компилятор отругает
Vladimir
drop(&mut self) сигнатура у которого
Anonymous
вот и все
Alexander
более сложный варинат let x = .. ; if (a) drop(x) ; else ;
Vladimir
Не существует эксплисита дропа
Alexander
имплицитный дроп не равен эксплицитному
я не понимаю как это помогает ответить на вопрос
Vladimir
У раста всего один дроп - это выход за области видимости
big
еще бы
Vladimir
Это был ответ х)
Alexander
fn a(b:bool): let x = A::new(); if b { std::mem::drop(x) } else { () }
Alexander
вот код, он соберётся?
Alexander
+-
big
а сори, не все читал
Konstantin
т.е. мой вопрос такой, что делает rust для того, чтобы drop 2 раза не вызвался
я не вдавался в контекст, но конркетно на этот вопрсо есть ответ в книге https://doc.rust-lang.org/book/second-edition/ch04-01-what-is-ownership.html
Konstantin
там ctrl-f по double free
Anonymous
вот код, он соберётся?
если х дальше не юзать
Vladimir
+-
Да соберётся но переменную нельзя будет юзать после иф
Alexander
это нормально
Anonymous
я не понимаю как это помогает ответить на вопрос
я думал что здесь про drop внутри самой функции fn drop(_) {}
Alexander
вопрос следующий, как это реализовано на низком уровне, что тут нету double free после else ветке
Alexander
когда мы выходим из скопа
Vladimir
Раньше было это через дроп флаги
Vladimir
Тебе скидывал ссылку @ozkriff
Alexander
т.е. грубо говоря мне интересен asm уровнеь
Vladimir
Сейчас это сделано в mir. Ведь ветки можно проанализировать и понять где был дроп.
Alexander
но я тупой и портянку асма буду читать слишком долго
Alexander
т.е. компилятор добавит неявный дроп вконце else ветки?
Ilya
На уровне асма никаких дропов и нет
Vladimir
Точнее он проигнорит второй дроп в ветке иф
Alexander
На уровне асма никаких дропов и нет
т.е. если у меня в дропе закрытия сокета, а в асме этого нету, то я сомниваюсь в справедливости утверждения
Alexander
Точнее он проигнорит второй дроп в ветке иф
вот! как технически это реализовано
Alexander
в этом вопрос
Vladimir
Посмотри на выхлоп mir
Alexander
где там online интерпретаторы были?
Vladimir
play.rust-lang.org
Alexander
спасибо
Anonymous
--emit mir
Ilya
в асме вызов функции закрытыия сокета, очевидно
Alexander
тогда утверждение о том что в асме нету дропов - ложно
Vladimir
+
Anton
вобщим
Anton
я сдал ебаный проект
Anton
сегодня обмываю
Anton
и у меня перерыв 10 дней
Anton
эти дни
Anton
я сделаю чтото по ебаный гуям
Anton
я обязан
Vladimir
вот вам кейс для мира https://play.rust-lang.org/?gist=b2469ed84f4545f6b80904ebf78e37ca&version=stable
Vladimir
там видно что по одной ветке оно создает структуру, и тут же дропает
Alexander
а можно попросить playrust не инлайнить функцию?
Anton
заодно позырю что там у вебрендера в кишказ
Vladimir
по остальной ничего не делает
Anonymous
все правильно же