как аргумент функции, понятно что всякие let _guard = mtx.lock() убирать он врядли будет
fn test(_arg: Type) {}
Компилятор гарантирует что все аргументы будут мувнуты в функцию вне зависимости от их использования.
Но они доживут до конца функции или же нет? Очевидный ответ - да, доживут, но мало ли какие там оптимизации
Кстати, тоже интересно, разве дроп не сразу происходит?
https://doc.rust-lang.org/stable/reference/destructors.html#scopes-of-function-parameters
Скорее всего такая функция просто заинлайнится, на аргументах вызовется дроп в основном коде и все (но не обязательно)
Я привел пример маленькой функции, мне это нужно в большой функции, где я хочу канал не закрывать сохранив один tx передав его в ту же функцию. Кстати про инлайнинг тоже интересный кейс, это же может очень странные эффекты создать, когда вызов какой-нибудь функции на самом деле заинлайнится и то что должно произойти при дропе аргументов не произойдет после вызова. Как-то страшнее стало жить после этого…
Разве #[inline(never)] не поможет в данном случае ?
Дроп же гарантированно вызывается в определённом месте, почему не произойдёт?
А если инлайнинг произошел? Я просто не уверен как инлайн происходит, мб там создается скоуп
А, инлайн же на уровне уже бекэнда
Я не уверен, что в расте строгие инлайн конструкции, мб компилятор может как в плюсах просто пропустить указание, надо читать Но как уже выше выяснили это не важно
Обсуждают сегодня