же
если у нас есть явный Drop, который позволяет пронаблюдать место дропа, то оно не скомпилируется
...и точно так-же may_dangle не даёт нам наблюдать невалидную ссылку ну сколько можно одно и тоже :(
мне кажется, мы о разном ты о #[may_dangle] в стдлибе, а я о #[may_dangle] в юзеркоде
если у тебя у самого включена фича dropck_eyepatch, то ты можешь легко пронаблюдать невалидную ссылку на входе в drop()
#[may_dangle] везде одинаковый, он требует unsafe и гарантии что ты ненаблюдаешь тип
кроме #[may_dangle], даже unsafe не позволяет породить невалидную ссылку без UB
Зависит от того, рассматривается ли висячая ссылка как safety или validity invariant
nll позволяет породить ненаблюдаемую невалидную ссылку. точно так-же как и #[may_dangle]. Единственная разница, в том, что на #[may_dangle] не работает (из-за сайд эффектов) твоя интуитивная ложь про drop() после последнего использования, всё. И с #[may_dangle] и с обычными структурами и nll у тебя технически есть невалидная ссылка, но наблюдать ты её не можешь.
почему это ложь? ты не можешь пронаблюдать отсутствие неявного drop() после последнего использования
Потому что в расте значения умирают в конце блока, просто пока у них нет сайдэффектов в дропе, неважно где конкретно они умерли.
это нельзя пронаблюдать именно в значении «физически невозможно», а не в значении «наблюдать это — UB»
И? Какая разница, UB by definition физически невозможно.
Обсуждают сегодня