нужно использовать правильно.
Если меряться тем как с помощью ансейфа реализовать заабузить какой-то из контрактов, то я тоже в это могу:
https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&gist=923fcf595c97148e7afbe2551ab0d4a1
ну так тогда и спорить не о чем
Я просто говорил про то, что Pin решает проблему "UB при передвижении структуры которая ссылается сама на себя" Решает он её вводя контракт, который проверяет что структура фиксирована в памяти. Дальше уже та логика которую ты хочешь получить - нужна ссылка на свою структуру, позаботься чтобы твою структуру можно было бы создать только Pin.
Я просто говорил про то, что Pin решает проблему "UB при передвижении структуры которая ссылается сама на себя" Решает он её вводя контракт, который проверяет что структура фиксирована в памяти. что значит проверяет? Pin::new работает только для тех типов которые Unpin, то есть где гарантии пина не важны, Pin::new_unchecked отдает соблюдение котнракта на откуп прогаммисту Дальше уже та логика которую ты хочешь получить - нужна ссылка на свою структуру, позаботься чтобы твою структуру можно было бы создать только Pin. ты же понимаешь что это можно сделать только через аллокацию, что во многих случаях как бы отстой
> что значит проверяет? Pin::new работает только для тех типов которые Unpin, то есть где гарантии пина не важны, Pin::new_unchecked отдает соблюдение котнракта на откуп прогаммисту new_unchecked - unsafe, там гарантий никаких нет. Точно также как отправка данных между тредами работает только для типов которые Send. Но свои "smart" поинтеры ты тоже можешь реализовать, и реализовать для них unsafe Send. Разницы тут нет. > ты же понимаешь что это можно сделать только через аллокацию, что во многих случаях как бы отстой. Дак не обязательно. Да раст не позволяет тебе вернуть из функции структуру которая запинена на стек. потому что стек так устроен. Но создать на стеке и передавать эту структуру внутрь функции никто не запрещает. https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&gist=042db2d1b1b59db65e02a3d0b9afba3c
1) Да 2) Да, но я это и написал конкретно к предложенному тобой способу Дальше уже та логика которую ты хочешь получить - нужна ссылка на свою структуру, позаботься чтобы твою структуру можно было бы создать только Pin.
Обсуждают сегодня