Size: a a a

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

2020 March 24

В

Вафель in Rust — русскоговорящее сообществo
Alex Zhukovsky
тлдр: вопрос в том, можно ли написать такую функцию:

fn run_twice<T>(f: impl Future<T>) -> Future<(T, T)> { ... }
С точно такой сигнатурой? Никак, после возвращения Poll::Ready у дальнейших вызовов poll не специфицировано поведение. Тут либо добавлять + Clone, либо стрим вместо футуры юзать.
источник

AT

Alexander Tchitchigin in Rust — русскоговорящее сообществo
red75prime
poll() вызывается периодически, поэтому не может поглощать футуру
С самой футурой всё сложно, но мы же про её результат говорили. По идее, футура владеет результатом, а когда мы его берём - передаёт владение нам, после чего футура всё, как происходит с остальными структурами. 🤷‍♀️
источник

В

Вафель in Rust — русскоговорящее сообществo
Alexander Tchitchigin
С самой футурой всё сложно, но мы же про её результат говорили. По идее, футура владеет результатом, а когда мы его берём - передаёт владение нам, после чего футура всё, как происходит с остальными структурами. 🤷‍♀️
Да, но ничто не мешает футуре просто возвращать Poll::Ready(()) всегда, она может создавать результат снова и снова
источник

AZ

Alex Zhukovsky in Rust — русскоговорящее сообществo
Ок, перефразирую еще раз: футуры можно клонировать?)
источник

🦉⁣

🦉 ⁣ in Rust — русскоговорящее сообществo
red75prime
poll() вызывается периодически, поэтому не может поглощать футуру
не футуру, а тип который она возвращает
источник

AZ

Alex Zhukovsky in Rust — русскоговорящее сообществo
хотя нет, это не то что я хотел
источник

🦉⁣

🦉 ⁣ in Rust — русскоговорящее сообществo
Alex Zhukovsky
Ок, перефразирую еще раз: футуры можно клонировать?)
а значит и тип который она возвращает
источник

AZ

Alex Zhukovsky in Rust — русскоговорящее сообществo
🦉 ⁣
а значит и тип который она возвращает
что? тип то она один и тот же возвращает
источник

🦉⁣

🦉 ⁣ in Rust — русскоговорящее сообществo
Вафель
С точно такой сигнатурой? Никак, после возвращения Poll::Ready у дальнейших вызовов poll не специфицировано поведение. Тут либо добавлять + Clone, либо стрим вместо футуры юзать.
++
источник

Э

Эрик in Rust — русскоговорящее сообществo
Alex Zhukovsky
хотя нет, это не то что я хотел
Ты не хотел писать
let a = foo().await;
let b = foo().await;

А почему - так и не рассказал.
источник

AZ

Alex Zhukovsky in Rust — русскоговорящее сообществo
Эрик
Ты не хотел писать
let a = foo().await;
let b = foo().await;

А почему - так и не рассказал.
main = do
 let a = print 10
 a
 a


Это можно написать на расте или нет? Именно в таком виде, с одним принтом
источник

AZ

Alex Zhukovsky in Rust — русскоговорящее сообществo
вот мне и было интересно
источник

AZ

Alex Zhukovsky in Rust — русскоговорящее сообществo
получается ИО это не совсем футуры
источник

Э

Эрик in Rust — русскоговорящее сообществo
fn main() {
let pr = || println!("{}", 10);
pr();
pr();
источник

AZ

Alex Zhukovsky in Rust — русскоговорящее сообществo
Language:
haskell


Source:
main = do
 let a = print 10
 a
 a


Result:
10
10
источник

AZ

Alex Zhukovsky in Rust — русскоговорящее сообществo
Эрик
fn main() {
let pr = || println!("{}", 10);
pr();
pr();
тут два вызова функции
источник

AZ

Alex Zhukovsky in Rust — русскоговорящее сообществo
мне интересно переиспользовать один _инстанс_
источник

Э

Эрик in Rust — русскоговорящее сообществo
А там что, один, штоле?
источник

p

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

В

Вафель in Rust — русскоговорящее сообществo
Alex Zhukovsky
Ок, перефразирую еще раз: футуры можно клонировать?)
Только если конкретно твоя футура умеет клонироваться ¯\_(ツ)_/¯  в общем случае — нет.
источник