Fork me on GitHub
#clojure-russia
<
2018-01-15
>
misha19:01:20

@potapenko не понял юзкейса для либы

potapenko19:01:34

как бы там все понятно описано. нет?

misha19:01:05

тем не менее )

potapenko19:01:55

это в основном для игр, где тебе нужно последовательно показывать и изменение данных (стейта) и отрисовывать.

potapenko19:01:18

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

potapenko19:01:14

вот конвейер он создаст новые элементы очереди где-то посередине и добавит их так, что разрабочику не нужно будет ничего думать как это синхронизировать.

potapenko19:01:47

обычная очередь всегда помещает новые шаги в конец, а нужно чтобы один элемент очереди “разложился” на несколько других.

potapenko19:01:31

@misha короче как будет у тебя кейс, где последовательность действий сложную нужно будет делать и всяки if/else еще в процессе - сразу захочешь такое.

potapenko19:01:47

в чистой clojure думаю такое использовать для state machine

potapenko19:01:22

где-то для флэша была статья

potapenko19:01:36

попрошу у флэшеров, может где осталось

misha20:01:04

читаю

misha20:01:54

мне просто это ну очень напоминает (cond->) или обычный корасинк канал

misha20:01:33

+ ты очередью называешь сразу и очередь (лол) функций на выполнение, и их выполнение

misha20:01:02

хотя это опять же редюс или луп

misha20:01:02

такой "выполнятор" последовательных действий в кложе - agent, в скрипте - атом, потому что однопоточный жс

misha20:01:38

может я бы просто такое в либу не оборачивал, хз.

misha20:01:04

а может там какой-то нюанс, который я не учитываю, ради решения которого стоит и в либку обернуть

potapenko21:01:41

“Вложенность” вот главная фича. Когда ты делаешь это через core.async тебе нужно заботится о callstack - ждать в главне chain-е, кода выполнится chan в вызываемой фукнции. А таких вот цепочек може быть много. Подход с conveyor это упрощает. Можешь сделать через core.async, конечно, но мне не хватало моего старого решения. Все получается наглядно и понятно.

misha21:01:01

да у меня как-то и юзкейса пока не было именно так, с таймаутами чейнить вызовы функций. разве что в составе стейтмашины, но твой конвеер как отдельная компонента скорее всего не сгодится (в той машине, что у меня недописанная)

misha21:01:01

спрведливости ради, я до анимаций на мобилочках и вебе пока не добрался, может там будет как раз в тему

potapenko21:01:07

это для игровой логики еще хорошо

potapenko21:01:15

все начиют с простого игрового loop и event-driven, потом приходят к очередям. а конвейер так вооще заставляет все переосмыслить. очень просто, но очень полезно.