Size: a a a

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

2020 April 19

T

Tema in Rust — русскоговорящее сообществo
Вафель
В трейтах нельзя делать асинхронные функции...

Откуда Perform?
impl Perform<LoginResponse> for Oper<Register> {
 async fn perform(&self, conn: &PgConnection) -> Result<LoginResponse, Error> {
источник

T

Tema in Rust — русскоговорящее сообществo
Вафель
В трейтах нельзя делать асинхронные функции...

Откуда Perform?
источник

K

Kitsu in Rust — русскоговорящее сообществo
Ilya Lakhin
Синхронизация ресурсов GPU
Хм странно, а почему количество меняется во времени?
источник

В

Вафель in Rust — русскоговорящее сообществo
Tema
impl Perform<LoginResponse> for Oper<Register> {
 async fn perform(&self, conn: &PgConnection) -> Result<LoginResponse, Error> {
> откуда трейт

Где он объявлён, а не где он имплементируется
источник

T

Tema in Rust — русскоговорящее сообществo
Вафель
> откуда трейт

Где он объявлён, а не где он имплементируется
pub trait Perform<T> {
 fn perform(&self, conn: &PgConnection) -> Result<T, Error>
 where
   T: Sized;
}
источник

В

Вафель in Rust — русскоговорящее сообществo
Без # Safety коммента точно не очень...

+ если ты увеличиваешь лайфтайм то ты 99.9% делаешь что-то не так.
источник

В

Вафель in Rust — русскоговорящее сообществo
Tema
pub trait Perform<T> {
 fn perform(&self, conn: &PgConnection) -> Result<T, Error>
 where
   T: Sized;
}
Это твой трейт?
источник

T

Tema in Rust — русскоговорящее сообществo
Вафель
Это твой трейт?
да
источник

Э

Эрик in Rust — русскоговорящее сообществo
Да вроде норм. Точно не скажу, но там же for NodeEntries<'a, K>, то есть по идее &mut self должен жить этот 'a лайфтайм.
источник

В

Вафель in Rust — русскоговорящее сообществo
Tema
да
Тогда async_trait крейт используй. Но учти что потом тебе эту функцию (perform) тоже придёться .await'ить
источник

IL

Ilya Lakhin in Rust — русскоговорящее сообществo
Kitsu
Хм странно, а почему количество меняется во времени?
Оно в общем-то не меняется, мне просто нужно сделать API для пользователя, чтобы он мог насабмитить несколько ресурсов для выполнения определенного набора задач с ресурсами. Но при этом чтобы где-то параллельно такого же сабмита не происходило с частью этих ресурсов.
источник

AV

A V in Rust — русскоговорящее сообществo
Вафель
Без # Safety коммента точно не очень...

+ если ты увеличиваешь лайфтайм то ты 99.9% делаешь что-то не так.
ну там прикол в том, что есть матрёшка
- итератор, внутри которого
- контейнер, внутри которого
- элементы
источник

K

Kitsu in Rust — русскоговорящее сообществo
А NodeTable не меняется структурно? Т.е. ссылка не может ли стать невалидной?
источник

AV

A V in Rust — русскоговорящее сообществo
Kitsu
А NodeTable не меняется структурно? Т.е. ссылка не может ли стать невалидной?
структурно не меняется - я просто мутирующе прохожусь по элементам мапы в NodeTable
источник

AV

A V in Rust — русскоговорящее сообществo
причём мутировать можно только сами элементы
источник

Э

Эрик in Rust — русскоговорящее сообществo
Там проблема в том, что можно сделать
let a = iter.next().unwrap();
let b = iter.next().unwrap();
и получить две мутабльных ссылки. Если такое работает и ссылки на одну ноду, то уб. Но без некста, если обработка идёт только в виде for_each() или for _ in _ должно быть норм.
источник

AV

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

Э

Эрик in Rust — русскоговорящее сообществo
Но вообще, для таких итераторов обычно делают fn next(&mut self) -> _ { panic!() }
источник

K

Kitsu in Rust — русскоговорящее сообществo
Без ансейфа кажется не выйдет, но яб Pin еще накрутил сверху, для явности
источник

T

Tema in Rust — русскоговорящее сообществo
Вафель
Тогда async_trait крейт используй. Но учти что потом тебе эту функцию (perform) тоже придёться .await'ить
не там куча ошибок полетела, а spawn можно заюзать тут?
источник