Size: a a a

2021 February 01

MB

Mikail Bagishov in Rust Async
Eugene
получается, что лучше минимизировать зависимость от tokio-stream?
Ну лично я не вижу проблем в том, чтобы им пользоваться.

Даже когда выйдет версия токио со встроенной поддержкой стримов, в тыкву tokio-stream не превратится.
источник

MB

Mikail Bagishov in Rust Async
Eugene
а что будет с tokio_stream::StreamExt ?
полагаю, его вернут в tokio, как это и было раньше.
источник

E

Eugene in Rust Async
а зачем тогда в tokio-stream вынесли?
источник

MB

Mikail Bagishov in Rust Async
Eugene
а зачем тогда в tokio-stream вынесли?
Потому что semver
источник

MB

Mikail Bagishov in Rust Async
трейт Stream - это публичная зависимость.
источник

MB

Mikail Bagishov in Rust Async
Значит, выпуск futures 0.4 не позволил бы tokio перейти на них
источник

MB

Mikail Bagishov in Rust Async
Ну то есть общий принцип такой, что если зависимость публичная (то есть ее кусочки видны в API твоей библиотеки), и ты меняешь ее версию на несовместимую, то это breaking change.
источник

MB

Mikail Bagishov in Rust Async
По той же причине tokio 0.2 был вынужден сидеть на старом mio - он был выиден в API, и обновится с 0.6 на 0.7 было нельзя.
источник

E

Eugene in Rust Async
а зачем trait Stream планируют добавить в std?
источник

MB

Mikail Bagishov in Rust Async
Потому что это важный для асинхронщины трейт, асинхроннйы аналог итераторов.
источник

MB

Mikail Bagishov in Rust Async
То есть примерно та же мотивация, что и с футурами.
источник

E

Eugene in Rust Async
понятно, спасибо
источник
2021 February 02

AV

A V in Rust Async
Eugene
trait Stream ведь во futures-core находится
futures - это futures
источник

AV

A V in Rust Async
этот крейт рангом идентичен tokio
источник

IL

Ilya Lakhin in Rust Async
Привет! А как из Future сделать другую Future, которая будет возвращать Some(T)?
источник

P

Pavel in Rust Async
@eliah_lakhin Может быть можно через
and_then(|v| async { Some(v) })
источник

RP

Roman Proskuryakov in Rust Async
Ilya Lakhin
Привет! А как из Future сделать другую Future, которая будет возвращать Some(T)?
future.map(Some)
источник

IL

Ilya Lakhin in Rust Async
ок, задача на самом деле несколько иная. Прошу прощения, что сразу не сформулироввал.

Есть Send + 'static функция, которая возвращает Send + 'static Future. Мне нужно эту функцию локально "обернуть" так, чтобы вначала она проверяла некое условие через ссылку на локальную переменную и в случае провала возвращала None, а в случае успеха выполняла исходную функцию и возвращала Some(T) от результата этой функции.

Примерно нечто вроде такого:

finish_flag = .. //это локальная переменная

let checked_iteration = move |reference: TaskReference| async move {
   if finish_flag.get().is_some() {
        return None;
   }

   Some(iteration(reference).await)
};
источник

IL

Ilya Lakhin in Rust Async
Там какая-то сложная ошибка смысл которой я не вполне понял, но кажется ему не нравится, что iteration не Sync
источник

IL

Ilya Lakhin in Rust Async
iteration - исходная функция
источник