Fork me on GitHub
#clojure-russia
<
2017-09-24
>
troglotit06:09:31

@rustam.gilaztdinov в кор-асинк добавляли https://clojuredocs.org/clojure.core.async/pipeline. На трансдюсерах

igrishaev11:09:12

да можно и без асинка, сделать вектор футур, потом каждую deref

rustam.gilaztdinov11:09:15

Насколько я помню, pmap внутри как раз на фьючерах и работает

ivana15:09:58

Подскажите, насколько такая штука законна? У меня как-то нестабильно работает, есть подозрения на то, что это хак.

(declare b)
(def a {:name "A", :ref b})
(def b {:name "B", :ref a})
(defn show [x]
  (str "name " (:name x) ", ref " (:name (:ref x))))
(println (show a))
(println (show b))

troglotit17:09:36

компилятор кложы - проходит в один проход, поэтому как раз таки законно. И именно для таких штук и существует declare

ivana17:09:04

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

dottedmag17:09:11

@ivana А как "нестабильно"?

ivana17:09:54

Будешь смеяться - но оно таки работало по ссылке друг на друга 🙂 Но один уровень вложенности, если гонять 2 и более - ошибки

dottedmag17:09:06

Можно пример, как не работает?

ivana17:09:36

щас попробую

ivana17:09:10

навскидку не получается написать простой ломающийся пример, но в рабочем коде оно ломалось

dottedmag17:09:47

@ivana Я подозреваю, что дело в том, что определения a и b вычисляются в момент их объявления.

dottedmag17:09:15

Можно использовать {:name "B" :ref #'a}, и делать @ тогда, когда используется. Тогда там будет последнее значение соответствующего Var.

dottedmag17:09:54

Это та же идея, что со строковым именем, но только выраженная встроенными средствами кложуры.

ivana17:09:52

Ну да, но на символ он мне тоже подсвечивал, что он неопределен, поэтому я решил тупо по строке 🙂

dottedmag17:09:51

Правильно, потому что Var нужно создать, прежде чем на него ссылаться.

dottedmag17:09:34

(declare b)
(def a {:name "A" :ref #'b})
(def b {:name "B" :ref #'a})
(defn show [x] (str "name " (:name x) ", ref " (:name @(:ref x))))
(show a)
(show b)

ivana17:09:44

а, и с символом, и с его декларацией! я когда на символы хотел заменить, декларации убрал.

dottedmag19:09:57

Господа, а куда бы можно подеплоить кложурный код, чтобы не заниматься ерундой с инфраструктурой? Чтобы одной командой jar залить, и он работал. Что-нибудь типа heroku.

dottedmag19:09:04

Трафика у меня будет около нуля.

dottedmag19:09:17

Google App Engine?

dottedmag21:09:28

Нормально, App Engine.