Size: a a a

2021 January 26

EG

Emmanuel Goldstein in rust_offtopic
Все гарантии Pin работают только до вызова деструктора
В момент вызова деструктора они заканчиваются
источник

EG

Emmanuel Goldstein in rust_offtopic
> At a high level, a Pin<P> ensures that the pointee of any pointer type P has a stable location in memory, meaning it cannot be moved elsewhere and its memory cannot be deallocated until it gets dropped
источник

ΑZ

Αλεχ Zhukovsky in rust_offtopic
Emmanuel Goldstein
drop(self) мог бы не иметь права передавать self куда-нибудь по значению или давать дожить до конца скоупа
мне кажется тут куча подводных может быть
источник

ΑZ

Αλεχ Zhukovsky in rust_offtopic
там правильно написали, что в будущем они могут это поменять, а пока так. Учитывая что щас 2021 и я первый раз слышу претензию к тому что дроп по &mut self делается не так уж это нужно чтобы костылить компиль
источник

EG

Emmanuel Goldstein in rust_offtopic
Αλεχ Zhukovsky
там правильно написали, что в будущем они могут это поменять, а пока так. Учитывая что щас 2021 и я первый раз слышу претензию к тому что дроп по &mut self делается не так уж это нужно чтобы костылить компиль
Из-за drop(&mut self) сейчас гигантская головная боль с may_dangle, и куча корректного кода невыразима в stable
источник

EG

Emmanuel Goldstein in rust_offtopic
drop(self) фундаментально проще
источник

D

Dima in rust_offtopic
Emmanuel Goldstein
А что меняется?
не знаю, но там уже есть какие-то костыли с pin и drop-ом   https://doc.rust-lang.org/std/pin/index.html#drop-implementation
источник

EG

Emmanuel Goldstein in rust_offtopic
Это касается только structural pinning и это ровно точно такая же проблема сейчас
источник

EG

Emmanuel Goldstein in rust_offtopic
Если ты считаешь, что все твои поля запинены, то ты не имеешь права их мувать в дропе
источник

D

Dima in rust_offtopic
Emmanuel Goldstein
Это касается только structural pinning и это ровно точно такая же проблема сейчас
че-то я не понимаю, вот запинил я свою замечательную self-ref структуру на стеке, а drop(self) считай мне все разъебет, разве нет?
источник

EG

Emmanuel Goldstein in rust_offtopic
Dima
че-то я не понимаю, вот запинил я свою замечательную self-ref структуру на стеке, а drop(self) считай мне все разъебет, разве нет?
Хм
Окей, согласен, запиненные структуры проще дропать через мутабельную ссыллку
источник

EG

Emmanuel Goldstein in rust_offtopic
*запиненные на стеке
источник

EG

Emmanuel Goldstein in rust_offtopic
Но это можно обойти, если от запиненных на стеке структур требовать, что они не реализуют Drop (но могут реализовывать, скажем, finalize(&mut self))
источник

D

Dima in rust_offtopic
мне кажется это только создаст проблем
источник

EG

Emmanuel Goldstein in rust_offtopic
Кажется, при аккуратной реализации это даже не требует спешлкейзов в языке (Pin::drop может в определённых случаях вызывать T::finalize(), и негативные баунды на Drop уже неявно разрешены)
источник

D

Dima in rust_offtopic
что делать с unsized типами ?
источник

EG

Emmanuel Goldstein in rust_offtopic
Dima
что делать с unsized типами ?
У unsized-типов сейчас бывает Drop?
источник

EG

Emmanuel Goldstein in rust_offtopic
Но, согласен, это тоже дыра в этой системе
источник

EG

Emmanuel Goldstein in rust_offtopic
unrelated
Попробую пофиксить
https://github.com/rust-lang/rust/issues/77966
Надо же мне тоже получить бейджик Contributor
источник

p

polunin.ai in rust_offtopic
Я сдулся на этапе сборки компилятора
источник