clojure-russia

Работа и релокейт: #jobs-rus | #clojure-russia-offtop Телеграм-чат https://t.me/clojure_ru
troglotit 2017-09-24T06:07:31.000027Z

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

igrishaev 2017-09-24T11:06:12.000076Z

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

rustam.gilaztdinov 2017-09-24T11:38:15.000028Z

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

2017-09-24T15:41:58.000068Z

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

(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))

troglotit 2017-09-24T17:34:36.000074Z

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

2017-09-24T17:40:04.000095Z

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

dottedmag 2017-09-24T17:42:11.000005Z

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

2017-09-24T17:42:54.000039Z

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

dottedmag 2017-09-24T17:43:06.000076Z

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

2017-09-24T17:43:36.000062Z

щас попробую

2017-09-24T17:47:10.000043Z

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

dottedmag 2017-09-24T17:47:47.000053Z

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

dottedmag 2017-09-24T17:48:15.000003Z

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

dottedmag 2017-09-24T17:48:54.000070Z

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

2017-09-24T17:49:52.000019Z

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

dottedmag 2017-09-24T17:50:51.000029Z

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

dottedmag 2017-09-24T17:51:34.000049Z

(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)

👍 1
2017-09-24T17:53:44.000015Z

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

dottedmag 2017-09-24T19:50:57.000020Z

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

dottedmag 2017-09-24T19:51:04.000045Z

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

dottedmag 2017-09-24T19:51:17.000083Z

Google App Engine?

dottedmag 2017-09-24T21:01:28.000016Z

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