Size: a a a

Rust — русскоговорящее сообществo

2020 October 17

MS

Mikola Summer Duck in Rust — русскоговорящее сообществo
Скастуй мне к статике struct Foo<'a>
источник

Э

Эрик in Rust — русскоговорящее сообществo
Ну делай не MyState<'a> ( &'a X, &'a Y);, а делай MyState(*const X, *const Y);, ссылки в указатели сейфово кастуются.
источник

MS

Mikola Summer Duck in Rust — русскоговорящее сообществo
Я уже отвечал на это
источник

Э

Эрик in Rust — русскоговорящее сообществo
Если ты макросом не может на любой тип завернуть каст к статику, то просто используй что-нибудь без лайфтайма.
источник

MS

Mikola Summer Duck in Rust — русскоговорящее сообществo
Я не контроллирую тип, который нужно даункастить.
источник

Э

Эрик in Rust — русскоговорящее сообществo
Вообще, ты решаешь несуществующую проблему. Для такого есть ассоциированные или генерик типы.
источник

MS

Mikola Summer Duck in Rust — русскоговорящее сообществo
Их нет.
источник

Э

Эрик in Rust — русскоговорящее сообществo
Mikola Summer Duck
Я не контроллирую тип, который нужно даункастить.
Ну баунди его статиком, да и всё. И пусть пользовать сам выворачивается.
источник

MS

Mikola Summer Duck in Rust — русскоговорящее сообществo
Основной юз кейз пользователя — передавать таким образом не-'static типы.
источник

Э

Эрик in Rust — русскоговорящее сообществo
Mikola Summer Duck
Их нет.
Чего нет? Лайфтаймов? Да, нет. Рантайма в расте нет. Хочешь рантайма — пиши рантайм и хитро заворачивай юзер-код в свой рантайм.
источник

MS

Mikola Summer Duck in Rust — русскоговорящее сообществo
Эрик
Чего нет? Лайфтаймов? Да, нет. Рантайма в расте нет. Хочешь рантайма — пиши рантайм и хитро заворачивай юзер-код в свой рантайм.
Я не хочу рантайма. Я хочу ансейф даункаст отбрасывающий лайфтаймы.
источник

MS

Mikola Summer Duck in Rust — русскоговорящее сообществo
Потому что моя абстракция соблюдает инварианты лайфтаймов в другом месте.
источник

MS

Mikola Summer Duck in Rust — русскоговорящее сообществo
Сколько можно-то.
источник

Э

Эрик in Rust — русскоговорящее сообществo
Mikola Summer Duck
Потому что моя абстракция соблюдает инварианты лайфтаймов в другом месте.
Принимай указатели вместо ссылок, если соблюдает.
источник

Э

Эрик in Rust — русскоговорящее сообществo
Ссылки кастятся к указателям в сейф коде.
источник

Э

Эрик in Rust — русскоговорящее сообществo
При этом указатели 'static, потому что не имеют лайфтаймов.
источник

MS

Mikola Summer Duck in Rust — русскоговорящее сообществo
Я уже отвечал и на это
источник

MS

Mikola Summer Duck in Rust — русскоговорящее сообществo
Ты не можешь создать даже *const dyn Any для Foo<'a>
источник

Э

Эрик in Rust — русскоговорящее сообществo
Ты просто пытаешься рантайм сделать, но в расте нет рантайма. Чтобы иметь лайфтаймы во время работы программы, а не во время компиляции, нужен рантайм.
источник

MS

Mikola Summer Duck in Rust — русскоговорящее сообществo
Нет, я не пытаюсь сделать рантайм.
источник