Size: a a a

2021 January 18

D

Denis in Rust Async
ну, тогда фигачь второй вариант, чтобы не было возможности как-то неправильно использовать
источник

f

folex in Rust Async
да, первый подозрительный очень
источник

f

folex in Rust Async
вот и хочется понять про него побольше :) Вдруг оверхеда там нет, а есть какие-нибудь полезные плюшки типа более честного переключения между потоками. не знаю, фантазирую
источник

OA

Oleg Andreev in Rust Async
hello! вопрос про композицию. Хочу как-то без слишком толстых фреймворков типа актиксов организовать следующий код:

Есть сетевой модуль, который крутит свою таску, в которой получает внешние мессаджи из одного канала и внутренние мессаджи как внутренний API с другого канала. И в этой таске в рамках select/match у него доступ к своим данным без всяких мьютексов. И он умеет слать апдейты через третий канал наружу для потребления.

Если поверх него построить еще один подобный модуль, то нужно опять два канала - один для внешнего API, другой для выдачи апдейтов, а внутри select по апдейтам из сложенного модуля и канала с api.

Получается как-то много повторяющейся бюрократии - каналы, спаунинг тасков, селекты и вот это все всякий раз, когда нужно новый "процесс" оформить. Есть ли какие-то хорошие паттерны, или либы, но чтоб без слишком толстых фреймворков?
источник

OA

Oleg Andreev in Rust Async
в каком-нибудь Эрланге вся эта композиция процессов довольно легковесно выглядит, но там, конечно, толстый рантайм.
источник

С

Сергей in Rust Async
Oleg Andreev
hello! вопрос про композицию. Хочу как-то без слишком толстых фреймворков типа актиксов организовать следующий код:

Есть сетевой модуль, который крутит свою таску, в которой получает внешние мессаджи из одного канала и внутренние мессаджи как внутренний API с другого канала. И в этой таске в рамках select/match у него доступ к своим данным без всяких мьютексов. И он умеет слать апдейты через третий канал наружу для потребления.

Если поверх него построить еще один подобный модуль, то нужно опять два канала - один для внешнего API, другой для выдачи апдейтов, а внутри select по апдейтам из сложенного модуля и канала с api.

Получается как-то много повторяющейся бюрократии - каналы, спаунинг тасков, селекты и вот это все всякий раз, когда нужно новый "процесс" оформить. Есть ли какие-то хорошие паттерны, или либы, но чтоб без слишком толстых фреймворков?
Есть другие актор фреймворки, можно на них наверное посмотреть, если они тебе покажутся легковесными. Если делать асинк, так и так тащить за собой рантайм асинка.
А что значит "поверх него"?
источник

С

Сергей in Rust Async
Я не мастер актикса, но в tower наверное можно сделать что-то вроде своего MakeService, который вернёт сразу сервис вместе с каналами и будет применять к ним функцию, которую укажешь. Не знаю, насколько это будет легковесно.
источник

С

Сергей in Rust Async
Хотя наверное в любом фреймворке или длаже без него можно сделать так же: весь боилерплйет, который ты описал, обложить абстракциями.
источник
2021 January 21

f

folex in Rust Async
источник
2021 January 22

p

polunin.ai in Rust Async
источник

KR

Kai Ren in Rust Async
источник

p

polunin.ai in Rust Async
еще один шутник
источник

KR

Kai Ren in Rust Async
Если не Copy, то прийдётся клонить.
источник

KR

Kai Ren in Rust Async
У тебя не может произвольный лайфтайм 'a уехать в 'static, сорян.
источник
2021 January 24

a

antuan in Rust Async
как можно взять tokio::select! от вектора? т.е. получить первый завершившийся таск из списка. при этом хочется, чтобы затем этот таск был из "списка" удален.
источник

OA

Oleg Andreev in Rust Async
antuan
как можно взять tokio::select! от вектора? т.е. получить первый завершившийся таск из списка. при этом хочется, чтобы затем этот таск был из "списка" удален.
см. StreamMap
источник

OA

Oleg Andreev in Rust Async
Oleg Andreev
см. StreamMap
и добавляй в него stream::once(future), если у тебя отдельные футуры
источник

a

antuan in Rust Async
https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&gist=66f5a9e893fcbf73b5acb6e3874e944e
вывод каждый раз разный:
0, 1, 2
2, 1, 0
0, 2, 1

чяднт?
источник

a

antuan in Rust Async
хм, мб в песочнице один тред выдается?..
источник

a

antuan in Rust Async
Да хотя какая разница... К тому ж локально та же штука.
источник