Fork me on GitHub
#clojure-russia
<
2016-06-14
>
seryh12:06:01

а transient коллекции кто-нибудь на практике использует?

kronos_vano12:06:30

Есть такой сниппет

(let [ch (chan)]
    (thread
      (job-1))
    (thread
      (job-2))
    (close-ch))
Хочу закрыть ch когда оба треда отработают. Кто подскажет как лучше сделать?

seryh12:06:44

шикарный сервис

seryh12:06:33

kronos_vano: можно вместо thread использовать future запихав результат в коллекцию promises и затем детекить когда оно там результат вернет через (mapv deref promises)

seryh12:06:38

(let [w1 (future (job-1))
      w2 (future (job-2))
      promises [w1 w2]]
  (mapv deref promises))

seryh12:06:48

но я нуб, меня можно не слушать

kronos_vano12:06:13

ну thread мне не принципиален

kronos_vano12:06:13

вполне себе решение

seryh12:06:15

чтоб не блокировать основной поток (mapv deref promises) можно засунуть уже в отдельный канал и блокировать уже его

kronos_vano12:06:40

не, mapv как раз надо чтобы блокировало все

kronos_vano12:06:46

тут все ок

kronos_vano14:06:14

@seryh: Забугорные коллеги подсказывают что лучше run! чем mapv

seryh14:06:36

ну если результат всех промисов не нужен, то да

seryh14:06:31

так то job-n может вернуть некий результат выполнения, или ошибки

kronos_vano14:06:43

результат не нужен

konukhov15:06:20

@fxposter: по валидациям (в том числе) я делал либу с хелперами всякими на базе funcool/cats (т.е. это все в концепции монад/аппликативных функторов) https://github.com/konukhov/pipeline/blob/master/examples/example1.clj в своих проектах юзаю ее – главные минусы: придется какие-то куски оборачивать в монады + делал под свои конкретные нужды

linuccio19:06:23

Добрый вечер. Есть ли кто-то кто использует garden и счастлив?

serioga19:06:27

Ну, например, так

(let [ch (chan)
      res1 (thread (job-1))
      res2 (thread (job-2))]

  (go (let [_ (<! res1)
            _ (<! res2)]
        (close ch))))

niwinz19:06:03

I think the let is redundant, it can be done directly

niwinz19:06:11

(go
  (<! res1)
  (<! res2))

abtv21:06:34

@seryh: я использую transient (правда, код позаимствовал на stack overflow): https://github.com/abtv/tech-radar/blob/c93c6c25d962251c8ab4405c49edc5ff860f77ee/src/clj/tech_radar/analytics/search.clj#L35 . у меня при старте приложения много данных грузится в одном потоке, там тоже можно использовать, еще руки не дошли.