Size: a a a

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

2020 October 31

MB

Mikail Bagishov in Rust — русскоговорящее сообществo
В обобщенном виде:
Foo::bar: Foo -> WrappedFoo
И все функции определены на WrappedFoo
источник

MB

Mikail Bagishov in Rust — русскоговорящее сообществo
И непонятно, почему ты не хочешь использовать пин для самоссылающихся структур, казалось бы это то что доктор прописал
источник

p

polunin.ai in Rust — русскоговорящее сообществo
Mikail Bagishov
И непонятно, почему ты не хочешь использовать пин для самоссылающихся структур, казалось бы это то что доктор прописал
не хочу потому что мувать эту структуру никто не собирается, и единственное ради чего нужен пин - это вызов одного метода.
источник

D

Denis in Rust — русскоговорящее сообществo
"никто не собирается" и "гарантии" — это имхо несовместимые вещи
источник

MB

Mikail Bagishov in Rust — русскоговорящее сообществo
То есть структура будет самоссылающейся только во время работы этого метода?
источник

MB

Mikail Bagishov in Rust — русскоговорящее сообществo
Тогда непонятно, какие внутренние гарантии могут нарушиться без его вызова
источник

p

polunin.ai in Rust — русскоговорящее сообществo
Mikail Bagishov
То есть структура будет самоссылающейся только во время работы этого метода?
нет, она всегда самоссылающаяся
источник

D

Denis in Rust — русскоговорящее сообществo
polunin.ai
есть какой-то линтер по типу must_use только для функции? У меня есть конструктор Foo::new() и мне нужно чтобы пользователь обязательно вызвал функцию foo.bar() после создания Foo::new(), иначе нарушатся внутренние гарантии.
ну в общем отвечая на оригинальный вопрос, must_use можно повесить и на функцию
источник

MB

Mikail Bagishov in Rust — русскоговорящее сообществo
А тогда нужно гарантировать так или иначе, что она не будет мувнута
источник

D

Denis in Rust — русскоговорящее сообществo
тогда будет линт на возвращаемое ею значение
источник

MP

Mag Pie in Rust — русскоговорящее сообществo
Почему не создать временный объект который бы оборачивал все параметры внутри себя и по вызову метода возвращал бы новый объект
источник

MB

Mikail Bagishov in Rust — русскоговорящее сообществo
И Pin это максимально эргономичный для пользователя вариант
источник

MP

Mag Pie in Rust — русскоговорящее сообществo
Типа прокси
источник

D

Denis in Rust — русскоговорящее сообществo
но ваще, если структура вида

struct Kek {
   field1: usize,
   field2: *const usize, // ссылка на field1
}

то тут даже пин не поможет
источник

D

Denis in Rust — русскоговорящее сообществo
потому что ничто не помешает замувать объект до того, как ты сделаешь Pin::new
источник

D

Denis in Rust — русскоговорящее сообществo
разве что макросом создавать, который будет на стеке создавать объект и тут же его пинить
источник

p

polunin.ai in Rust — русскоговорящее сообществo
Denis
тогда будет линт на возвращаемое ею значение
так мне нужно чтобы вызвалась конкретная функция после создания объекта
источник

p

polunin.ai in Rust — русскоговорящее сообществo
Mikail Bagishov
А тогда нужно гарантировать так или иначе, что она не будет мувнута
это гарантируется лайфтаймами уже
источник

D

Denis in Rust — русскоговорящее сообществo
polunin.ai
это гарантируется лайфтаймами уже
никак это лайфтаймами  не гарантируешь
источник

p

polunin.ai in Rust — русскоговорящее сообществo
то есть объект вполне себе в определенном скоупе спокойно используется
источник